REST

Die fünf Paradigmen der REST-Technologie

In der Vorlesung haben Sie ja bereits die REST-Technologie kennengelernt. Die REST-Technologie ist durch fünf Paradigmen [Fielding] charakterisiert:

  • Client-Server:
Clients und Server haben klar getrennte Aufgaben. Beide Systeme können unabhängig voneinander weiterentwickelt werden.
  • Stateless:
Alle Informationen für einen Aufruf sind in diesem enthalten
  • Cache:
Dienste können als cacheable markiert werden. Dadurch können sie schneller Antworten liefern.
  • Uniform interface:
Identifikation von Resourcen, Verwendung von Hyperlinks
  • Layered:
Clients können nur die vorderste Schicht des Webdienstes sehen

Was bedeutet das nun für den praktischen Zugriff auf REST-basierte Webdienste?

Durch das Client-Server-Prinzip ist die Implementierung des Serverdienstes unabhängig vom Client. Dies bedeutet, dass eine Änderung in der Serverimplementierung keine Änderung in der Client-Programmierung notwendig macht. Dies kommt daher, da die Schnittstelle (in der REST-Technologie die HTTP-Anfrage) unabhängig von der tatsächlichen Implementierung ist. Dies ermöglicht eine Implementierung des Serverdienstes in verschiedenen Programmiersprachen (Java, Python, …), ohne dass die Schnittstelle, und damit die Client-Implementierung geändert werden muss.

REST-basierte Webdienste sind zustandslos (engl. stateless). Das bedeutet, dass zwischen den einzelnen Aufrufen keine Informationen über die Anfragen gespeichert werden. In jeden Aufruf müssen also alle für die Ausführung der Operation benötigten Parameter übertragen werden. Einerseits führt das natürlich zu einer erhöhten Datenmenge, die über das Netzwerk übertragen werden muss. Anderseits liegt der enorme Vorteil dieses Prinzips in der Effizienz der Ausführung der Serveranfrage: Dadurch, dass alle benötigten Parameter in jedem Aufruf mitgeliefert werden müssen, können die Anfragen auf verschiedene Rechner (z.B in einem Servercluster) verteilt werden. Stellen Sie sich vor, es gibt 100.000 Anfragen auf einen Serverdienst pro Minute. Dann muss der Server in einem nicht-verteilten Serverdienst alle 100.000 Anfragen pro Minute bearbeiten. Wenn aber ein verteilter Serverdienst mit 20 Servern installiert ist, dann muss jeder einzelne Server in dem Servercluster nur 5.000 Anfragen pro Minute bearbeiten. Anhand dieses kleinen Beispiels sieht man bereits, dass das Prinzip der Zustandslosigkeit für Serverdienste ein wichtiges Prinzip darstellt.

Das Prinzip der Zwischenspeicherung (engl. cache) kann ebenfalls zu einer besseren Performance des Serverdienstes beitragen. Hierbei werden Anfragen, deren Antwort sich nicht mehr in Zukunft ändern wird, mit dem sogenannten cacheable-Flag markiert. Wenn Antworten als cacheable markiert sind, können Sie zwischengespeichert werden. Bei einem erneuten Aufruf der gleichen Anfrage, muss die Antwort nicht erst berechnet werden, sondern kann direkt aus dem Zwischenspeicher ausgelesen und zurückgegeben werden.

Das Prinzip des Uniform Interface ist wohl das wichtigste und bedeutendste Prinzip in der REST-Technologie: Das Prinzip fordert, dass alle relevanten Daten über ein einheitliches Zugriffskonzept erreichbar sein sollen. Das Zugriffskonzept besagt, dass sämtliche Ressourcen (das sind Dateien oder Methoden) über URLs adressierbar und damit zugreifbar sein sollen. Die Ressourcen können auch implementierte Methoden im Webservice sein, die den Inhalt der Ressource zurückliefern und damit auch automatisch berechnen können. Die Adressierung der Ressourcen folgt in der Regel einer Konvention der URLs, die man für jeden Webdienst neu definieren kann.

Die Kommunikation von Webdiensten, die auf der REST-Technologie basieren, erfolgt über das HTTP-Protokoll. Da Webbrowser dieses Protokoll unterstützen, können Webbrowser zum Aufrufen von Webdiensten benutzt werden. Dies ist ein enormer Vorteil gegenüber der SOAP-Technologie, die nur das XML-Format unterstützt. Es soll angemerkt werden, dass Webdienste, die auf der REST-Technologie basieren, auch XML-Dokumente erstellen und verarbeiten können. Allerdings sind diese XML-Dokumente dann in den Nutzdatenbereich des HTTP-Protokolls zu integrieren. Dies ist allerdings immer ganz leicht möglich.

Das Layered-Prinzip ist ebenfalls ein wichtiges Prinzip in der REST-Technologie. Das Prinzip besagt, dass nur die vorderste Ebene (Layer) von außen zugreifbar ist. Alle dahinterliegenden Ebenen (z.B. Datenbanken oder allgemein Daten auf Servern) sind nicht von außen direkt zugreifbar. Das Layered-Prinzip kann dadurch ein einheitliches Zugriffskonzept, wie im Prinzip Uniform Interface beschrieben, ermöglichen.

Webdienste, die alle fünf oben genannten Paradigmen nutzen, bezeichnet man als RESTful Web Services.

 

Verwendung von Platzhaltern in URLs

In vielen Implementierungen von Webserver-Engines ist es möglich, sogenannte Platzhalter (engl. wildcard) für URL-Pfade zu definieren. Ein Beispiel für einen solchen Platzhalter ist /url/{Platzhalter}/test. Dies bedeutet, das u.a. folgende URLs durch diesen Deskriptor beschrieben werden:

/url/1/test

Platzhalter = 1

/url/Daten/test

Platzhalter = Daten

/url/9000/test

Platzhalter = 9000

 

Hinweis: Beachten Sie, dass beispielsweise die URL /url/Daten/test1 nicht durch den o.g. Deskriptor beschrieben wird.

Es ist auch möglich, mehrere Platzhalter in einer URL zu verwenden. Dies wird im folgenden Beispiel deutlich.

 

Ein Beispiel

Für die präzise Berechnung von Wettervorhersagen sind eine Vielzahl von Messdaten nötig. Die Messdaten (in diesem Fall mal nur die Temperatur) werden in Wetterstationen stündlich erfasst. Jeder Wetterstation ist durch eine eindeutige Nummer gekennzeichnet.

 

Es soll nun ein Dienst bereitgestellt werden, mit dem ein Client bestimmte Messwerte einer bestimmten Wetterstation abfragen kann.

Stellen Sie sich vor, dass die Wetterstationen nicht alle das gleiche Baujahr haben. Die Firmware und eventuell damit auch die Schnittstellen in diesen Wetterstationen könnten sich im Laufe der Zeit geändert haben. Daraus folgt, dass der Zugriff auf unterschiedliche Wetterstationen unterschiedlich erfolgen kann. Alle Benutzer, die die Daten ohne Webdienst abfragen möchten, müssten alle Spezifikationen der einzelnen Wetterstationen kennen.

 

Worin liegt jetzt der Vorteil der Nutzung der REST-Technologie?

Durch die Verwendung der REST-Technologie könnte dieser Nachteil behoben werden: Der Webdienst stellt eine Ressource bereit, die Kontakt zu einer angegebenen Wetterstation aufbaut, die relevanten Daten ausliest, und dem Benutzer im Browser zur Verfügung stellt.

Die Adresse dieser Ressource, die für eine Wetterstation mit einer bestimmten Nummer und einen bestimmten Zeitstempel die Messdaten zurückgibt, könnte so heißen:

http://iktwebservice.iim.maschinenbau.tu-darmstadt.de:8080/WetterService/res/WetterStationen/{wetterstation}/{zeitstempel}

(Achtung: Dieser Link funktioniert nur an einem Computer im IiM-Pool.)

 

Hierbei wäre {wetterstation} der Platzhalter für die Nummer der Wetterstation und {zeitstempel} der Platzhalter für den Zeitstempel der Messdaten.

 

Die Adresse dieser Ressource für eine Wetterstation Nr. 691 und den Zeitstempel 20140526 (26. Mai 2014) sieht also so aus:

http://iktwebservice.iim.maschinenbau.tu-darmstadt.de:8080/WetterService/res/WetterStationen/691/20140526

(Achtung: Dieser Link funktioniert nur an einem Computer im IiM-Pool.)

 

Die Antwort ist dann eine Webseite mit den stündlichen Temperaturdaten vom 26. Mai 2014 der Wetterstation 691 (Das ist die Wetterstation in Bremen).

 

Nun wollen Sie die Messwerte des gleichen Tages der Wetterstation 5906 auslesen. Diese Wetterstation hat eine neue Firmware und hat ein anderes Zugriffskonzept. Der Vorteil liegt nun im Aufruf über den Webdienst, da das Format der Anfrage und der Antwort gleich bleibt:

http://iktwebservice.iim.maschinenbau.tu-darmstadt.de:8080/WetterService/res/WetterStationen/5906/20140526

(Achtung: Dieser Link funktioniert nur an einem Computer im IiM-Pool.)

 

Im Praxisteil dieses Tutorials werden Sie lernen, wie die URLs zusammengebaut werden.