Neben dem äußerst komfortabel zu verwendenden StorageClient bietet Windows Azure auch noch die etwas komplexere Möglichkeit, die REST API zu verwenden. Dies kann in verschiedenen Fällen durchaus sinnvoll sein. Wenn man etwa Performance und Kontrolle über die Anfragen braucht, ist die REST API hier sicher im Vorteil (und bei Windows Azure zahlt man auch für die einzelnen HTTP-Verbs, also pro Anfrage).
Wie man REST-basierte Abfragen in Windows Azure verwenden kann wird in diesem Posting und den folgenden erklärt. Im Ersten Posting wollen wir uns mal der Frage widmen was REST genau ist und wie man sich dies im Kontext von Windows Azure vorstellen kann.
Als Basis für die REST Beispiele werden wir hierbei die MessageQueues verwenden, da diese am einfachsten zum Erklären sind.
Was genau ist REST?
Bevor wir uns der StorageAPI zuwenden wollen wir uns kurz die REST API ansehen.
REST steht für “Representational State Transfer” und ist ein Architekturstil für das World Wide Web. Im Gegensatz zu SOAP nutzt es bereits vorhandene HTTP-Standards und setzt keine weitere Transportschicht ein. REST ist zustandslos und kennt keine Cookies oder Sitzungen.
REST Webservices werden über eine URL angesprochen. Die HTTP-Nachricht vom Client an den Server enthält alle Informationen, welche der Server braucht um diese zu verarbeiten.
Typische Operationen für eine REST-Abfrage sind:
- GET
- POST
- PUT
- DELETE
Responses werden üblicherweise im XML-Format zurück gesendet. Dies ist auch bei Windows Azure so der Fall
MessageQueues in Windows Azure Storage
MessageQueues dienen der Kommunikation von verschiedenen Rollen in Windows Azure. So ist es möglich, das die WebRole einen Auftrag an die WorkerRole stellt (z.B. “generiere E-Mails an Teilnehmer des Events, erstelle Rechnung im .docx Format, …)
MessageQueues sind die einfachste Einheit in Windows Azure Storage. Prinzipiell gibt es folgende Levels:
- Account
stellt alle Queues in einem Account dar. Ein Account kann mehrere MessageQueues enthalten - MessageQueue
Stellt eine einzelne MessageQueue dar. Eine MessageQueue kann mehrere Messages enthalten - Message
Eine Message ist die kleinste Einheit. Man kann diese mit “Pop” für einen gewissen Zeitraum für andere Rollen unsichtbar machen oder mit “Peek” nur anzeigen. Bei “Peek” bleiben diese dann für andere Rollen sichtbar.
Die Adresse des Queue-Accounts ist folgende
http://[myaccount].queue.core.windows.net
[myaccount] muss durch den tatsächlichen Account ersetzt werden.
Will man eine einzelne Queue adressieren:
http://myaccount.queue.core.windows.net/myqueue
einzelne Messages befinden sich unter
http://myaccount.queue.core.windows.net/myqueue/messages
Beispiel einer einfachen Anfrage
Eine einfache, REST-basierte Abfrage an Windows Azure sieht folgendermaßen aus:
http://myaccount.queue.core.windows.net?comp=list
Hierbei wird der Account {myaccount} mit dem eigenen Account ersetzt. “?comp=list” gibt an das man hierbei die einzelnen Queues auflisten will. Klar zu erkennen ist das im vorigen Abschnitt erklärte Nameing Schema der API.
Sicherheit: Verschlüsselung
Ein wichtiger Punkt bei Windows Azure ist die Verschlüsselung. Anfragen werden normalerweise mit einem SharedKey identifiziert. Neben diese muss in den WebRequest auch noch die x-ms-version und das x-ms-date angegeben werden.
x-ms-version: 2009-04-14
x-ms-date: Tue, 18 Nov 2008 00:55:16 GMT Authorization: SharedKey myaccount:Q7tar7qqM2LD/Wey7OQNPP3hMNap9wjg+g9AlAYeFls=
Damit Anfragen nicht als Plain-Text gesendet werden, müssen diese auch noch Verschlüsselt werden.
Das nächste Posting, welches in ein paar Tagen online sein wird, kümmert sich um die Erstellung der Verschlüsselung von REST Anfragen.
Weitere Literatur:
Queue Service API:
http://msdn.microsoft.com/en-us/library/dd179363.aspx
Authentifizierung:
http://msdn.microsoft.com/en-us/library/dd179428.aspx
REST:
http://de.wikipedia.org/wiki/Representational_State_Transfer