14.2 REST 

Representational State Transfer
Unter dem Begriff REST (Representational State Transfer) findet eine Rückbesinnung auf grundlegende Web-Technologien statt, die die Implementierung verteilter, webbasierter Systeme vereinfachen sollen. Bei dieser Technik erfolgt die Kommunikation ausschließlich über das HTTP- Protokoll.
REST ist ein komplexes Thema, das wir Ihnen anhand unserer Ressource Airport aus unserer Beispielapplikation railsair erläutern wollen.
Zugriff über HTTP
Der REST-Standard definiert einen Standard, wie mit dem HTTP-Protokoll ein Zugriff auf Ressourcen (z. B. eine News-Meldung) erfolgen kann. Mit »Zugriff« ist nicht nur die Anzeige einer Ressource gemeint, sondern auch die Möglichkeit, eine Ressource z. B. löschen zu können.
Ressourcen / Nomen 

Uniform Resource Locator
Eine URL (Uniform Resource Locator) identifiziert eine Ressource. Ressourcen können sein:
- eine News-Meldung
- Detailansicht eines Bookmarks
- Liste aller Bookmarks
- ein Suchformular
- ein Dokument
- ein Bild
Adresse
Die URL ist daher nichts anderes als die Adresse einer Ressource. Zum Beispiel lautet die URL zu einer ganz bestimmten News auf heise online:
http://www.heise.de/newsticker/meldung/100265
In diesem Fall ist die Ressource eine Newsmeldung. Eine Ressource wird im REST-Standard auch als Nomen bezeichnet.
Für die Anzeige einer Ressource muss die URL lediglich im Adressfeld eines Browsers eingegeben werden.
Beispiele
In der URL sollte nur der Pfad zu einer Ressource angegeben werden und nicht auch noch, was mit der Ressource passieren soll, so wie in unserem Beispiel (Standard-Routing :controller/:action/:id):
- http://localhost:3000/airports/show/12
Zeige den Flughafen mit der ID 12 an.
- http://localhost:3000/airports/destroy/1
Lösche den Flughafen mit der ID 1.
- http://localhost:3000/airports/update/12
Ändere den Flughafen mit der ID 12.
- http://localhost:3000/airports/create
Füge einen neuen Flughafen hinzu.
In diesen URLs wird sowohl ein Befehl (show, destroy usw.) als auch die Ressource (Airport mit der ID 12) angegeben. Nach dem REST-Standard ist diese Doppelfunktion möglichst zu vermeiden, da in der URL nur die Ressource angegeben werden soll. (In der Praxis lässt sich das jedoch nicht immer vermeiden.)
HTTP-Methoden / Verben 

Es stellt sich jedoch die wichtige Frage, wie man nach dem REST-Standard eine Anfrage stellt, um z. B. eine Ressource zu löschen.
GET, POST, PUT, DELETE
Die Lösung hierfür sind die HTTP-Methoden. Jeder, der schon einmal HTML-Seiten erstellt hat, kennt die beiden HTTP-Methoden GET und POST. Die wenigsten kennen jedoch PUT und DELETE.
Beim REST-Standard kommt den HTTP-Methoden eine besondere Bedeutung zu. Sie geben an, was mit der Ressource passieren soll. Es gibt noch weitere HTTP-Methoden wie HEAD und OPTIONS, die aber in Rails nicht eingesetzt werden.
Verben
Die HTTP-Methoden werden nach dem REST-Standard auch Verben genannt.
Allgemeiner Aufruf
Wenn eine URL angefragt wird, wird immer angegeben, mit welcher HTTP-Methode die Anfrage gesendet wurde.
Folgende Bedeutung haben die HTTP-Methoden nach dem dem REST-Standard:
- GET URL
Fordert die angegebene Ressource an.
- POST URL] Legt eine neue Ressource an.PUT URL
Ändert die angegebene Ressource.
- DELETE URL
Löscht die angegebene Ressource.
- HEAD URL
Fordert Metainformationen für die Resource an (nicht in Rails).
- OPTIONS URL
Liefert die Methoden, die der Resource zur Verfügung stehen (nicht in Rails).
Beispiel
Für unsere Flughafen-Ressource bedeutet das:
- GET http://localhost:3000/airports/1
Fragt bzw. zeigt den Flughafen mit der ID 1 an.
- PUT http://localhost:3000/airports/1
Ändert den Flughafen mit der ID 1.
- DELETE http://localhost:3000/airports/1
Löscht den Fughafen mit der ID 1.
- POST http://localhost:3000/airports
Legt einen neuen Flughafen an.
In Rails ist es üblich, dass man mit dem Aufruf
GET http://localhost:3000/airports
alle Airports anfragt.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.