Paketsuche/Aufbau
aus openSUSE, der freien Wissensdatenbank
Architektur
Dies ist ein Weg, auf dem wir die Paketsuche implementieren können, so dass die Hauptlast der benötigten Hardware von Novell/SUSE bereitgestellt wird, wobei es dennoch möglich ist, auch Paketdepots einzubeziehen, die von der Nutzer- und Entwicklergemeinde betreut werden und denen eventuell rechltiche Vorbehalte anheften.
Übrigens: Um es der Web-Schnittstelle und anderen zu ermöglichen, die gefundenen Pakete sinnvoll zu sortieren, wird jedem vom REST-Dienst gelieferten Ergebnis eine Priorität zugeteilt. Bspw:
- 10 = normales Paket
- 5 = von Novell/SUSE unterstütztes Paket
- 0 = kritische Sicherheitsaktualisierung
Zur Zeit ist die von der Web-Schnittstelle genutzte Datenbank aus Geschwindigkeitsgründen von der aktualisierten Datenbank getrennt.
Eine potentielle Erweiterung für die Zukunft ist das Anlegen einer Schnittstelle für den Build Service und andere Paketierungsprojekte, über welche fertige Pakete und aktualisierte Paketdepots automatisch mitgeteilt werden können.
Web-Dienstschnittstelle
Einfaches Suchen nach einem Suchbegriff in Paketname und Paketinhalt:
GET Search/Simple/<Distribution>/<Suchbegriff> GET Search/Simple/<Distribution>/<Suchbegriff>?number=<Anzahl der Ergebnisse>&page=<Seitennummer>
Nur in Paketnamen suchen:
GET Search/ByName/<Distribution>/<Suchbegriff> GET Search/ByName/<Distribution>/<Suchbegriff>?number=<Anzahl der Ergebnisse>&page=<Seitennummer>
Nur im Paketinhalt suchen:
GET Search/ByContents/<Distribution>/<Suchbegriff> GET Search/ByContents/<Distribution>/<Suchbegriff>?number=<Anzahl der Ergebnisse>&page=<Seitennummer>
Dateiliste für ein bestimmtes Paket abrufen:
GET Package/Contents/<Distribution>/<Prüfsumme des Pakets>
Zusammenfassung und Beschreibung für ein bestimmtes Paket abrufen:
GET Package/Info/<Distribution>/<Prüfsumme des Pakets>
Alle indizierten Paketdepots anzeigen:
GET Repos/<Distribution>
Alle inidzierten Paketdepots ausgeben, auf die der Suchbegriff zutrifft:
GET Repos/<Distribution>/<Suchbegriff>
Metapaket abrufen, um ein bestimmtes Paket automatisch zu installieren:
GET YMPs/<Distribution>/<Prüfsumme>
Schemata
Suchergebnis:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://ws.pkgsearch.benjiweber.co.uk' xmlns:bw='http://ws.pkgsearch.benjiweber.co.uk'> <xs:complexType name="package"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="version" type="xs:string"/> <xs:element name="repoURL" type="xs:string"/> <xs:element name="archs"> <xs:complexType> <xs:sequence> <xs:element name="arch" minOccurs="1" maxOccurs="unbounded" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="distro" type="xs:string"/> <xs:element name="priority" type="xs:integer"/> <xs:element name="checksum" type="xs:string"/> <xs:element name="matchedFileName" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:element name="packages"> <xs:complexType> <xs:sequence> <xs:element name="package" minOccurs="0" maxOccurs="unbounded" type="bw:package"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Paketinformation:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://ws.pkgsearch.benjiweber.co.uk' xmlns:bw='http://ws.pkgsearch.benjiweber.co.uk'> <xs:element name="packageInfo"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="summary" type="xs:string"/> <xs:element name="description" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Paketinhalt:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://ws.pkgsearch.benjiweber.co.uk' xmlns:bw='http://ws.pkgsearch.benjiweber.co.uk'> <xs:element name="packageContents"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Paketdepots:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://datastructures.pkgsearch.benjiweber.co.uk' xmlns:bw='http://datastructures.pkgsearch.benjiweber.co.uk'> <xs:complexType name="repo"> <xs:sequence> <xs:element name="url" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:element name="repos"> <xs:complexType> <xs:sequence> <xs:element name="repo" minOccurs="0" maxOccurs="unbounded" type="bw:repo"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
YMP:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://suse.benjiweber.co.uk' xmlns:bw='http://suse.benjiweber.co.uk'> <xs:complexType name="package"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="summary" type="xs:string"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="recommended" type="xs:boolean"/> </xs:complexType> <xs:complexType name="repo"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="summary" type="xs:string"/> <xs:element name="description" type="xs:string"/> <xs:element name="url" type="xs:string"/> </xs:sequence> <xs:attribute name="recommended" type="xs:boolean"/> </xs:complexType> <xs:element name="metapackage"> <xs:complexType> <xs:sequence> <xs:element name="repos"> <xs:complexType> <xs:sequence> <xs:element name="repo" minOccurs="0" maxOccurs="unbounded" type="bw:repo"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="packages"> <xs:complexType> <xs:sequence> <xs:element name="package" minOccurs="0" maxOccurs="unbounded" type="bw:package"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>




