Prinzipien ·
Ressourcen ·
HTTP-Methoden ·
Statuscodes ·
HATEOAS ·
Reifegradmodell
REST (Representational State Transfer) ist ein Architekturstil für Web-APIs. Diese Cheatsheet fasst die grundlegenden Konzepte, Prinzipien und Best Practices für die Entwicklung von RESTful APIs zusammen.
REST-Prinzipien definieren die grundlegenden Architekturregeln für RESTful APIs. Sie wurden von Roy Fielding in seiner Dissertation definiert.
Ressourcen sind die zentralen Elemente einer REST-API. Jede Ressource wird durch eine URI (Uniform Resource Identifier) identifiziert und kann verschiedene Repräsentationen (JSON, XML, etc.) haben.
| Konvention | Beschreibung | Beispiel |
|---|---|---|
| Substantive (Plural) | Ressourcen als Substantive im Plural | /users, /products, /orders |
| Verschachtelung | Beziehungen zwischen Ressourcen | /users/42/orders |
| Filter/Parameter | Query-Parameter für Filter, Sortierung | /products?category=books&sort=price |
| HTTP-Methoden | Keine Verben in der URI! | ❌ /getUsers, ✅ /users |
| Kleinbuchstaben | URIs in Kleinbuchstaben | /api/v1/users |
/users statt /user. Vermeiden Sie Verben in der URI – sie gehören in die HTTP-Methode (GET, POST, PUT, DELETE).
HTTP-Methoden definieren die Aktion auf der Ressource. In RESTful APIs folgen sie dem CRUD-Prinzip (Create, Read, Update, Delete).
| Methode | CRUD | Idempotent | Safe | Beschreibung |
|---|---|---|---|---|
| GET | Read | ✅ | ✅ | Ressource abrufen |
| HEAD | Read | ✅ | ✅ | Nur Header abrufen |
| OPTIONS | — | ✅ | ✅ | Unterstützte Methoden abfragen |
| POST | Create | ❌ | ❌ | Neue Ressource erstellen |
| PUT | Update | ✅ | ❌ | Ressource vollständig ersetzen |
| PATCH | Update | ❌ | ❌ | Ressource teilweise aktualisieren |
| DELETE | Delete | ✅ | ❌ | Ressource löschen |
Statuscodes geben das Ergebnis der Anfrage zurück. RESTful APIs verwenden die HTTP-Statuscodes konsistent, um Erfolg, Fehler und Weiterleitungen zu kommunizieren.
| Code | Name | Verwendung | Body |
|---|---|---|---|
| 200 | OK | GET, PUT, PATCH (Erfolg) | ✅ |
| 201 | Created | POST (Ressource erstellt) | ✅ (oder Location) |
| 202 | Accepted | Asynchrone Operation | ✅ (optional) |
| 204 | No Content | DELETE, erfolgreiche Operation ohne Body | ❌ |
| 301 | Moved Permanently | Dauerhafte Weiterleitung | ❌ |
| 400 | Bad Request | Ungültige Anfrage (Syntax, Validierung) | ✅ (Fehlerdetails) |
| 401 | Unauthorized | Authentifizierung erforderlich | ✅ (optional) |
| 403 | Forbidden | Keine Berechtigung | ✅ (optional) |
| 404 | Not Found | Ressource nicht gefunden | ✅ (optional) |
| 405 | Method Not Allowed | HTTP-Methode nicht erlaubt | ✅ (optional) |
| 409 | Conflict | Konflikt (z.B. veraltete Version) | ✅ (Fehlerdetails) |
| 422 | Unprocessable Entity | Validierungsfehler | ✅ (Fehlerdetails) |
| 429 | Too Many Requests | Ratenlimit überschritten | ✅ (optional) |
| 500 | Internal Server Error | Allgemeiner Server-Fehler | ✅ (optional) |
201 Created mit dem Location-Header zurückgegeben werden. Bei DELETE ist 204 No Content die übliche Antwort. Bei Validierungsfehlern verwenden Sie 422 Unprocessable Entity mit aussagekräftigen Fehlermeldungen.
HATEOAS ist ein Prinzip, bei dem die API-Antwort Links zu verwandten Ressourcen enthält. Der Client navigiert über diese Links, statt URIs selbst zu konstruieren. Erreicht wird dies durch Formate wie HAL oder JSON-LD.
Richardson Maturity Model bewertet den Reifegrad einer REST-API in vier Stufen. Die meisten realen APIs erreichen Level 2 – die konsequente Nutzung von HTTP-Methoden und Statuscodes.
| Level | Name | Beschreibung | Beispiel |
|---|---|---|---|
| 0 | Swamp of POX | Ein einziger URI, nur POST, RPC-Stil | POST /api, Body: { method: "getUser", id: 42 } |
| 1 | Resources | Mehrere URIs für Ressourcen, aber nur eine Methode | POST /users/42 (zum Abrufen) |
| 2 | HTTP Verbs | Korrekte HTTP-Methoden (GET, POST, PUT, DELETE) und Statuscodes | GET /users/42 → 200 OK |
| 3 | Hypermedia Controls | HATEOAS – Links zu verwandten Ressourcen | GET /users/42 → _links: { orders: ... } |
Stateless
URI
GET
200
_links
Level 2
GET /users → 200 OK ·
POST /users → 201 Created ·
PUT /users/42 → 200 OK ·
DELETE /users/42 → 204 No Content