REST API Grundlagen

6 Kernkonzepte
Die wichtigsten REST-API-Konzepte für die Entwicklung von Web-APIs: 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 – Die 6 Grundsätze

Client-Server · Stateless · Cache · Uniform Interface · Layered · Code-on-Demand
# REST-Prinzipien Client-Server – Trennung von Frontend und Backend Stateless – Jede Anfrage enthält alle notwendigen Informationen Cache – Antworten sollten cachable sein Uniform Interface – Einheitliche Schnittstelle (URI, Methoden, Headers) Layered System – Schichtenarchitektur (Proxy, Load Balancer) Code-on-Demand (optional) – Auslieferung von ausführbarem Code

REST-Prinzipien definieren die grundlegenden Architekturregeln für RESTful APIs. Sie wurden von Roy Fielding in seiner Dissertation definiert.

Erklärung
# 1. Client-Server – Unabhängige Entwicklung von Frontend und Backend
# 2. Stateless – Keine Session auf dem Server; jeder Request ist unabhängig
# 3. Cache – Antworten können vom Client oder Proxy gecacht werden
# 4. Uniform Interface – Einheitliche Ressourcen-Identifikation (URI) und Manipulation (HTTP-Methoden)
# 5. Layered System – API kann über mehrere Schichten (z.B. Load Balancer, Proxy) laufen
# 6. Code-on-Demand (optional) – Server kann Client Code ausliefern (z.B. JavaScript)
# Wichtigstes Prinzip: Uniform Interface + Stateless = Skalierbarkeit
Tipp: Die wichtigsten Prinzipien für die Praxis sind Stateless (keine Serversessions) und Uniform Interface (konsistente Nutzung von URIs, HTTP-Methoden und Statuscodes). Diese beiden Prinzipien machen REST so skalierbar.

Ressourcen – URIs & Repräsentationen

/users · /users/42 · /orders · /products
# Ressourcen-URI-Struktur GET /users # Alle Benutzer GET /users/42 # Benutzer mit ID 42 GET /users/42/orders # Bestellungen von Benutzer 42 GET /products?category=books # Gefilterte Ressourcen

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.

Ressourcen-Namenskonventionen

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
Beispiele
# Ressourcen-URIs für eine Blog-API
GET /api/v1/posts # Alle Beiträge
GET /api/v1/posts/42 # Beitrag mit ID 42
GET /api/v1/posts/42/comments # Kommentare zu Beitrag 42
GET /api/v1/users/123/posts # Beiträge von User 123
# Versionierung – API-Version in der URI
/api/v1/ # Version 1
/api/v2/ # Version 2
Tipp: Verwenden Sie Substantive im Plural für Ressourcen-URIs – /users statt /user. Vermeiden Sie Verben in der URI – sie gehören in die HTTP-Methode (GET, POST, PUT, DELETE).

HTTP-Methoden – CRUD-Operationen

GET · POST · PUT · DELETE · PATCH · HEAD · OPTIONS
GET /users # Auflisten GET /users/42 # Einzelnes Element POST /users # Erstellen PUT /users/42 # Vollständig ersetzen PATCH /users/42 # Teilweise aktualisieren DELETE /users/42 # Löschen

HTTP-Methoden definieren die Aktion auf der Ressource. In RESTful APIs folgen sie dem CRUD-Prinzip (Create, Read, Update, Delete).

Methoden im REST-Kontext

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
Beispiele
# GET – Alle Benutzer abrufen
GET /api/users
# POST – Neuen Benutzer erstellen (mit Body)
POST /api/users
{ "name": "Anna", "email": "anna@example.com" }
# PUT – Benutzer vollständig aktualisieren (alle Felder)
PUT /api/users/42
{ "name": "Anna Schmidt", "email": "anna.schmidt@example.com" }
# PATCH – Benutzer teilweise aktualisieren (nur name)
PATCH /api/users/42
{ "name": "Anna Schmidt" }
# DELETE – Benutzer löschen
DELETE /api/users/42
Tipp: Verwenden Sie PUT für vollständige Updates (Client sendet das gesamte Objekt) und PATCH für Teil-Updates (nur die geänderten Felder). POST ist nicht idempotent – jede Anfrage erzeugt eine neue Ressource.

Statuscodes – Antworten kategorisieren

200 OK · 201 Created · 400 Bad Request · 401 Unauthorized · 404 Not Found
# 2xx – Erfolg 200 OK # Erfolgreiche GET/PUT/PATCH 201 Created # Ressource erstellt (POST) 204 No Content # Erfolg, kein Body (DELETE) # 4xx – Client-Fehler 400 Bad Request # Ungültige Anfrage 401 Unauthorized # Authentifizierung fehlt 403 Forbidden # Keine Berechtigung 404 Not Found # Ressource nicht gefunden 422 Unprocessable Entity # Validierungsfehler

Statuscodes geben das Ergebnis der Anfrage zurück. RESTful APIs verwenden die HTTP-Statuscodes konsistent, um Erfolg, Fehler und Weiterleitungen zu kommunizieren.

Wichtige Statuscodes für REST-APIs

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)
Beispiele
# 200 OK – Erfolgreicher GET
HTTP/1.1 200 OK
{ "id": 42, "name": "Anna" }
# 201 Created – Ressource erstellt
HTTP/1.1 201 Created
Location: /api/users/43
# 422 Unprocessable Entity – Validierungsfehler
HTTP/1.1 422 Unprocessable Entity
{ "errors": { "email": ["must be a valid email"] } }
Tipp: Bei POST sollte 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 – Hypermedia as the Engine of Application State

_links · HAL · JSON-LD
# HATEOAS-Antwort mit HAL-Format { "_links": { "self": { "href": "/api/users/42" }, "orders": { "href": "/api/users/42/orders" }, "profile": { "href": "/api/users/42/profile" } }, "id": 42, "name": "Anna" }

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.

Beispiele
# HAL (Hypertext Application Language) – JSON mit _links
{
"_links": {
"self": { "href": "/api/users" },
"next": { "href": "/api/users?page=2" },
"prev": { "href": "/api/users?page=1" },
"create": { "href": "/api/users", "method": "POST" }
},
"_embedded": {
"users": [
{ "id": 1, "name": "Anna", "_links": { "self": { "href": "/api/users/1" } } }
]
}
}
# Vorteile von HATEOAS:
# – Client muss keine URIs hardcoden
# – API-Änderungen können ohne Client-Anpassungen erfolgen
# – Selbstbeschreibende API (Entdeckbarkeit)
Tipp: HATEOAS ist das fortgeschrittenste REST-Prinzip und wird in der Praxis nicht immer umgesetzt. Für öffentliche APIs ist es jedoch ein starkes Alleinstellungsmerkmal. Beliebte Formate sind HAL (JSON) und JSON-LD.

Richardson Maturity Model – Reifegrad von REST-APIs

Level 0 · Level 1 · Level 2 · Level 3
# Level 0 – The Swamp of POX Ein einziger URI, eine Methode (z.B. POST), RPC-Stil # Level 1 – Resources Mehrere URIs für Ressourcen, aber nur eine Methode # Level 2 – HTTP Verbs Korrekte Verwendung von HTTP-Methoden und Statuscodes # Level 3 – Hypermedia Controls (HATEOAS) Links in Antworten zur Navigation

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.

Die vier Level im Detail

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: ... }
Level-Vergleich
# Level 0: RPC-Style (XML-RPC, SOAP-ähnlich)
POST /api
{ "method": "getUser", "params": { "id": 42 } }
# Level 1: Resources (aber nur POST)
POST /users/42
# Level 2: HTTP Verbs (RESTful)
GET /users/42200 OK
PUT /users/42200 OK
DELETE /users/42204 No Content
# Level 3: Hypermedia (HATEOAS)
GET /users/42
{ "id": 42, "name": "Anna", "_links": { "self": "/users/42", "orders": "/users/42/orders" } }
Tipp: Die meisten APIs erreichen Level 2 – das ist der praktische Standard. Level 3 (HATEOAS) ist das Ideal für wirklich selbstbeschreibende APIs, wird aber oft aus Komplexitätsgründen nicht umgesetzt. Für öffentliche APIs ist Level 3 jedoch ein starkes Qualitätsmerkmal.

REST API Kernkonzepte im Überblick

REST Architekturstil
Stateless, Cache, Uniform Interface
Ressource URI + Repräsentation
/users, /products
CRUD Create, Read, Update, Delete
POST, GET, PUT/PATCH, DELETE
Statuscodes 2xx, 4xx, 5xx
200, 201, 400, 404, 500
HATEOAS Hypermedia Links
_links, HAL, JSON-LD
Maturity Level 0–3
RPC → RESTful → HATEOAS

Quick Summary

Stateless
Keine Sessions
URI
Ressourcen
GET
Methoden
200
Statuscodes
_links
HATEOAS
Level 2
Maturity Model
GET /users → 200 OK · POST /users → 201 Created · PUT /users/42 → 200 OK · DELETE /users/42 → 204 No Content