Auf der MIX07-Konferenz stellte Microsoft Project Astoria vor. Dabei handelt es sich um einen Ansatz zur Realisierung von Webservices nach dem REST-Modell, welches im Gegensatz zu herkömmlichen Webservices stateful ist.
Microsoft beschreibt die Ziele des laut Astoria Online Service folgendermaßen:
Astoria soll Applikation erlauben, Daten als Datendienste zu exponieren, die von Web-Clients innerhalb eines Unternehmensnetzwerkes und über das Internet konsumiert werden können. Der Datendienst ist über HTTP zugreifbar und URIs identifizieren unterschiedliche Teile der Informationen, welche durch den Dienst bereitgestellt werden. Interaktionen mit dem Datendienst geschehen über HTTP-Verben wie GET, POST, PUT oder DELETE und die die Daten der Interaktionen werden über einfache XML-Formate oder mittels JSON repräsentiert.
Das Microsoft Codename “Astoria” Overview Document zeigt, wie Daten adressiert und von Astoria Datendiensten dargestellt werden. Um Daten mit Astoria Datendiensten zu adressieren wird folgendes Adressierungsschema verwendet:
http://host/vdir//{ {<[predicate]>}
Beispielsweise zeigt http://myserver/data.svc/Customers auf eine Resource, die alle Customer-Instanzen enthält. Ein einzelner Kunde könnte beispielsweise mittels
http://myserver/data.svc/Customers[KEY]
abgefragt werden, wobei KEY einen eindeutigen Schlüssel innerhalb der Kundendaten repräsentiert.
Zusätzlich können Prädikate und Abfragestrings in die URIs integriert werden, welche die Ausgabe beeinflussen können:
http://myserver/data.svc/Customers?$orderby=City http://myserver/data.svc/Customers?$top=5 http://myserver/data.svc/Customers?$skip=30&$take=10
Die Astoria-Daten liegen entweder als XML, JSON (JavaScript Object Notation) oder einer Untermenge von RDF+XML vor. Standardmäßig wird XML verwendet. So antwortet der Server auf den URI http://myserver/data.svc/Customers[KEY] mit:
<dataService xml:base="http://myserver/data.svc"> <customers> <customer uri="Customers[KEY]"> <customerID>KEY</customerID> <companyName>Steve's Online Shop</companyName> <contactName>Maria Anders</contactName> <contactTitle>Sales Representative</contactTitle> <address>Obere Str. 57</address> <city>Berlin</city> <region /> <postalCode>12209</postalCode> <country>Germany</country> <phone>030-0074321</phone> <fax>030-0076545</fax> <orders href="Customers[KEY]/Orders" /> </customer> </customers> </dataService>
Die Wurzel DataService beinhaltet immer den Basis-URI einer von dem Dienst representierten Resource. Zusätzliche Navigationsknoten, die assoziierte Resourcem beschreiben sind immer mit relativen URIs versehen. In diesem Beispiel sind die Bestellungen (orders) des Kunden KEY verfügbar indem der relative URI mit dem Basis-URI verknüpft wird:
http://myserver/data.svc" + "/" + "Customers[ALFKI]/Orders
Außer GET kann auch HTTP PUT oder HTTP-POST genutzt werden.
Udi Dahan ist ziemlich skeptisch über den Nutzen und die Relevanz von Astoria und Microsoft’s Datenserviceansatz im Allgemeinen:
Ich muß sagen, ich war vom ersten Tag an gegen diese “Datendienste”. Der REST-Stil ist hauptsächlich nützlich für große, stückweise vorliegende Resourcen, während es scheinbar auch auf einzelne Tabellen in einer Datenbank absieht. Die Diskussion über REST vs SOA gibt einige Beispiele.
Danny Ayers jedoch denkt, daß Microsoft mit Astoria dem Symantischen Web näher kommt. Und Alex James gibt einen ausführlichen Überblick über den Astoria Buzz.
graegerts