Das REST (Representational State Transfer) ist ein Architekturstil für verteilte Systeme, ursprünglich beschrieben von Roy Fielding in seiner Dissertation. Eine REST-API bildet die Anwendung als Sammlung von Ressourcen ab, die über stabile URLs adressiert und mit den Standardmethoden von HTTP verändert werden.
REST ist kein Protokoll und kein Framework, sondern eine Reihe von Prinzipien. Die meisten heute „REST" genannten APIs erfüllen diese Prinzipien nur teilweise — entscheidend ist die Grundlogik: Ressourcen, Methoden und Repräsentationen.
Grundprinzipien
REST stützt sich auf einige zentrale Ideen:
- Ressourcen — alles, worauf zugegriffen wird, ist eine Ressource und hat eine eigene URL.
- HTTP-Methoden als Verben —
GETliest,POSTerzeugt,PUTersetzt,PATCHändert,DELETEentfernt. - Statuscodes geben das Ergebnis maschinenlesbar wieder.
- Repräsentationen — eine Ressource kann in verschiedenen Formaten ausgeliefert werden (JSON, XML, HTML), gesteuert über Header wie
Accept. - Zustandslosigkeit — jeder Request enthält alle nötigen Informationen; der Server hält keinen Sitzungszustand pro Client.
- Cachebarkeit — Antworten geben über Header an, ob und wie lange sie zwischengespeichert werden dürfen.
Beispiel-Aufrufe
GET /artikel → Liste aller Artikel
GET /artikel/42 → Einzelner Artikel
POST /artikel → Neuen Artikel erzeugen
PUT /artikel/42 → Artikel ersetzen
PATCH /artikel/42 → Artikel teilweise ändern
DELETE /artikel/42 → Artikel löschenAuffallend: Die URL beschreibt was, die Methode welche Operation. Verben gehören nicht in den Pfad — /artikel/42/loeschen ist nicht REST-konform.
Reifegrad
Das Richardson Maturity Model unterscheidet vier Stufen:
- Level 0 — eine einzige URL, alles per
POST. - Level 1 — getrennte URLs pro Ressource.
- Level 2 — korrekter Einsatz von HTTP-Methoden und Statuscodes.
- Level 3 — HATEOAS: Antworten enthalten Links auf weitere Aktionen, der Client navigiert dynamisch.
Die meisten produktiven REST-APIs liegen auf Level 2 — pragmatisch genug, um nützlich zu sein, ohne die volle theoretische Strenge.