Webservice API für Bibsonomy1

Bibsonomy-Datenmodell mit Hilfe von Java Architecture for XML Binding (JAXB)6 serialisiert ... jektarbeit eine java-basierte Client-API entstanden, die einfach in ...
186KB Größe 5 Downloads 161 Ansichten
Webservice API für Bibsonomy1

Manuel Bork [email protected]

1

Schriftliche Ausarbeitung des Projekts im SS 2006 im Fachgebiet Wissensverarbeitung, Prof. Dr. Gerd Stumme, Universität Kassel

Zusammenfassung Bibsonomy ist ein Ressourcenverwaltungssystem, das im Fachgebiet Wissensverarbeitung der Universität Kassel entwickelt worden ist [HJSS06]. Die momentan unterstützten Ressource-Typen sind Bookmarks und Publikationen. Durch die einfache Handhabung ermöglicht Bibsonomy den Benutzern einen schnellen und direkten Zugri sowohl auf die eigenen als auch auf die Ressourcen anderer Mitglieder. Um die Nutzbarkeit und damit den Communityeekt weiter zu verstärken wurde im Rahmen eines Projekts im Sommersemester 2006 eine Webservice API für Bibsonomy entwickelt. Die vorliegende Ausarbeitung beschreibt die Architektur des Webservices und des API. 1

Einleitung: REST-API

Die meisten web2.0 Systeme, wie Flickr2 , Delicious3 , u.a. bieten Webservices zur maschinellen Nutzung an. Durchgesetzt haben sich4 zwei Technologien: SOAP und REST-Architekturen. Representational State Transfer (REST) ist ein Begri, der von Roy Fielding, einem der Hauptautoren der HTTP Spezikation, in seiner Dissertation [Fie00] geprägt wurde. Auch der Bibsonomy Webservice folgt der REST-Architektur. REST-Architekturen unterliegen vier Prinzipien:

Zustandsloses Client/ Server-Protokoll Jede Botschaft im verwendeten Protokoll enthält alle

notwendigen Informationen, um sie verarbeiten zu können. Weder client- noch serverseitig ist es notwendig Zustandsinformationen vorzuhalten. Als Übertragungsprotokoll verwendet der Bibsonomy Webservice HTTP.

Wohldenierte Operationen Das Protokoll deniert die Operationen, die auf alle Ressourcen

angewendet werden können. Diese sind in HTTP GET (Ressourcenrepräsentation holen), PUT (Ressourcenrepräsentation ändern oder gänzlich neu anlegen), POST (Ressource unterhalb einer bestehenden Ressource anlegen) und DELETE (Ressource löschen). Mit Hilfe dieser Verben wird die gesamte Interaktion mit den Ressourcen beschrieben.

Universelle Syntax Zur Identikation wird jede Ressource durch genau eine URI adressiert. Verwendung von Hypermedia Zum Repräsentationsaustausch verwendet der Webservice XML Dokumente.

1.1

URL Schema

Zur uniformen Adressierung und Identizierung wurde ein URL Schema festgelegt, welches man sich wie ein Dateisystem vorstellen kann. Die einzelnen Anfragen können teilweise mit Attributen der Form ?key=value ergänzt werden. Beschreibung

Methode

Liste aller User User anlegen Details eines Users Userdetails ändern User löschen Liste der Posts eines Users

GET POST GET PUT DELETE GET

Post hinzufügen Details zu einem Post Post ändern

POST GET PUT

2

http://www.ickr.com http://del.icio.us 4 laut http://www.programmableweb.com/apis 3

1

URL

/users /users /users/[username] /users/[username] /users/[username] /users/[username]/posts ?tags=[t1+t2+...+tn] ?resourcetype=(bibtex|bookmark) /users/[username]/posts /users/[username]/posts/[resourceHash] /users/[username]/posts/[resourceHash]

Beschreibung

Post löschen

Methode

DELETE

URL

Liste aller Gruppen Gruppe hinzufügen Details einer Gruppe Gruppe ändern Gruppe löschen Liste aller Gruppenmitglieder Gruppenmitglied hinzufgen Gruppenmitglied entfernen Liste aller Tags

GET POST GET PUT DELETE GET POST DELETE GET

Details zu einem Tag ersetzt das gemeinsame Vorkommen von t1,t2,.. durch T1,T2,..

GET PUT

/groups /groups /groups/[groupname] /groups/[groupname] /groups/[groupname] /groups/[groupname]/users /groups/[groupname]/users /groups/[groupname]/users/[username] /tags ?filter=[regex] ?(user|group|viewable)=[username/groupname] /tags/[tag] /substitutetags?from=[t1+t2+..]&to=[T1+T2+..]

Liste aller Posts

GET

Liste der neuesten Posts

GET

Liste der populärsten Posts

GET

/users/[username]/posts/[resourceHash]

/posts ?tags=[t1+t2+...+tn] ?resourcetype=(bibtex|bookmark) ?(user|group|viewable)=[username/groupname] ?resource=[hash] /posts/added ?resourcetype=(bibtex|bookmark) /posts/popular

Die URLs können zusätzlich noch um folgende Attribute ergänzt werden (start und

end

nur bei Listen):

?format=(xml|rdf|html) ?start=[int], beginnend bei 0, default 0 ?end=[int], beginnend bei 0, default 19

Bei Tags ist folgende Notation gültig: ->[Tag] ->[Tag] [Tag]-> [Tag]-> [Tag] 1.2

Tag Tag Tag Tag Tag

und und und und und

dessen dessen dessen dessen dessen

direkte Kinder Kinder (transitiv) direkte Eltern Eltern (transitiv) korrelierte Tags

XML Schema

Zum Datenaustausch werden XML Dokumente verwendet. Die einzelnen Austauschdokumente sind jeweils valide zu einem XML Schema, das hier auszugsweise für die Posts dargestellt ist5 . 5

Das vollständige Schema mit Beispielen und ps://www.bibsonomy.org/BibWiki/RestApiUrls betrachtet werden.

2

Erläuterungen

kann

unter

htt-



2 2.1

Architektur Server Architektur

Mit der Entwicklung der Bibsonomy WebService API ging ein vollständiges Redesign der Bibsonomy Serverkomponente einher, um auch zukünftige Weiterentwicklungen leicht anbinden zu können. Bibonomy2 besteht aus fünf Komponenten (siehe Abbildung 1): WebServiceAPI, JSPView, Controller, Datenmodell und Datenbankanbindung. Kern der vorliegenden Arbeit waren die WebServiceAPI und das Datenmodell.

Abb 1: Architektur Bibsonomy2: Komponentendiagramm

2.1.1 WebServiceAPI Server-Komponente Die

Serverseite der WebServiceAPI besteht aus einem Servlet, das die ankommenden Requests entgegennimmt. Die Verarbeitung des Requests lässt sich in fünf Phasen unterteilen. Zunächst wird die Autorisierung des Clients geprüft. Danach wird der Context des Requests initialisiert. Der Kontext enthält per GET übergebene Request-Parameter, die verwendete HTTP-Methode und die Request URI. Im Rahmen der KontextInitialisierung instanziiert der Kontext sich eine Strategy und einen Renderer. Für jede angebotene API-Schnittstelle (siehe Abschnitt 1.1) existiert eine Strategy -Implementierung. Diese Klassen enthalten die zur Umsetzung der jeweiligen Funktionalität erforderliche Logik. Im nächsten Schritt wird geprüft, ob die angeforderte Operation für den gegebenen Benutzer erlaubt ist. Ist dies der Fall, wird schlieÿlich die Operation durchgeführt und die Antwort vom entsprechenden Renderer serialisiert. Im Rahmen der vorliegenden Projektarbeit ist ein XML-Renderer implementiert worden, der das Bibsonomy-Datenmodell mit Hilfe von Java Architecture for XML Binding (JAXB)6 serialisiert.

Client-Komponente

Prinzipiell hat der Anwendungsentwickler die Möglichkeit direkt mit dem REST-Webservice zu interagieren. Daher ist die API-Spezikation auch frei zugänglich. Zusätzlich ist im Rahmen der vorliegenden Projektarbeit eine java-basierte Client-API entstanden, die einfach in bestehende Java-Applikationen integriert werden kann. Bei der Entwicklung der Client-API wurde besonders auf eine einfache Anwendung Wert gelegt. So muss der Applikationsentwickler lediglich ein Objekt vom Typ Bibsonomy instanziieren und diesem Benutzernamen und Password 6 JAXB ist eine Programmschnittstelle in Java, die es ermöglicht, Daten aus einem XML-Schema automatisch an Java-Klassen zu binden; diese sogar aus einer XML-Schema-Instanz heraus zu generieren. Somit soll ein Arbeiten mit XML-Daten möglich werden, bei welchem der Programmierer nicht mehr auf die XML-Parsing-Technologien SAX und DOM angewiesen ist. Quelle: http://java.sun.com/webservices/jaxb/

3

Abb 2: Architektur WebServiceAPI: Klassendiagramm der Serverkomponente des Benutzers sowie eine auszuführende Query übergeben: Auch auf Clientseite gibt es, analog zur Serverseite, für jede API-Schnittstelle (siehe Abschnitt 1.1) eine Query -Implementierung. Zusätzlich hat der Anwendungsentwickler die Möglichkeit einen Renderer zur Serialisierung der Daten zu wählen. Momentan unterstützt die Client-API nur den XML-Renderer - auch hier wird wieder JAXB verwendet; die beteiligten Klassen werden von Client-/ und Server-API geteilt.

Abb 3: Architektur WebServiceAPI: Klassendiagramm der Client-Komponente

2.1.2 Datenmodell

Das Datenmodell repräsentiert die zur Laufzeit verwendeten Datensätze. Das Modell entspricht dem Datenbankschema und wurde mithilfe der Fujaba Tool Suite7 generiert.

2.1.3 JSP-View

Diese Komponente erstellt die Browserversion von Bibsonomy mit Hilfe von Java Server Pages. Sie ist nicht Teil dieses Projekts.

2.1.4 Controller

Diese Komponente ist die operative Schicht zwischen Datenmodell und JSP-View/ WebService-API. Sie stellt Funktionalitäten zur Manipulation des Modells zur Verfügung und hat eine Schnittstelle zum Laden und Speichern von Datensätzen über die Datenbankanbindung. Sie ist ebenfalls kein Bestandteil dieses Projekts.

2.1.5 Datenbankanbindung Zur persistenten Speicherung der Datensätze verwendet Bibsonomy eine MySQL Datenbank. 7

Fujaba ist ein Open Source UML CASE Tool welches an der Universität Paderborn entwickelt wurde. Siehe http://www.fujaba.de/

4

Literatur [Fie00]

Roy T. Fielding. Architectural Styles and University of California, Irvine, 2000.

the Design of Network-based Software Architectures.

PhD thesis,

[HJSS06] Andreas Hotho, Robert Jäschke, Christoph Schmitz, and Gerd Stumme. BibSonomy: A social bookmark and publication sharing system. In Aldo de Moor, Simon Polovina, and Harry Delugach, editors, Proceedings of the Conceptual Structures Tool Interoperability Workshop at the 14th International Conference on Conceptual Structures, Aalborg, Denmark, July 2006. Aalborg University Press.

5