REST-API Antworten: Liste, Ressource, Fehler
REST-Schnittstellen liefern Ressourcen meist als JSON und nutzen HTTP-Statuscodes für das Ergebnis. Die Seite zeigt Listenantworten mit Seiten- und Cursor-Paginierung, eine einzelne Ressource mit Umschlag, Antworten für DELETE, 304, 405 und 422 sowie einen Health-Check mit 503. Das JSON-Schema ist ein eigenes Muster und kein Standard.
27 Varianten auf einer Seite, jede mit eigenem Kopier- oder Download-Knopf. Darunter: 11× Reservierter Bereich.
Listenantwort mit Seitenangaben (Seiten-Modell)Reservierter Bereich
{ "daten": [ { …Seiten-Modell mit Gesamtzahl; 42 Einträge bei 3 pro Seite ergeben 14 Seiten.
Listenantwort mit Offset und LimitReservierter Bereich
{ "daten": [ { …Offset-Modell; bei sich ändernden Daten können Einträge doppelt oder gar nicht erscheinen.
Listenantwort mit CursorReservierter Bereich
{ "daten": [ { …Cursor-Modell: stabil bei Änderungen, kein direkter Seitensprung. Cursor ist Base64url-ähnlicher Platzhalter.
Letzte Seite einer Cursor-ListeReservierter Bereich
{ "daten": [ { …Kein weiterer Cursor.
Leere Listenantwort
{ "daten": [], "meta": { …Status 200 mit leerer Liste, nicht 404.
Liste als reines JSON-ArrayReservierter Bereich
[{"id":"K-000001","name":"Erika Beispiel","email":"erika.beispiel@example.com","ort":"Berlin"},{"id":"K-000002","name":"Max Mustermann","email":"max.mustermann@example.com","ort":"Hamburg"}]Ohne Umschlag; Seitenangaben dann in Headern (Link, X-Total-Count).
Einzelne RessourceReservierter Bereich
{ "daten": { "id": "K-000001", …Mit Umschlag „daten“.
Einzelne Ressource ohne UmschlagReservierter Bereich
{ "id": "K-000001", "name": "Erika Beispiel", …Das Objekt direkt.
Antwort auf POST: 201 Created
HTTP/1.1 201 Created Location: /api/kunden/K-000004 Content-Type: application/json …
Location verweist auf die neue Ressource.
Antwort auf DELETE: 204 No Content
HTTP/1.1 204 No Content
Kein Body, kein Content-Type.
PATCH mit JSON Merge PatchReservierter Bereich
PATCH /api/kunden/K-000001 HTTP/1.1 Host: example.com Content-Type: application/merge-patch+json …
null entfernt das Feld telefon (RFC 7396).
JSON Patch (RFC 6902)
[ { "op": "replace", …Operationen add, remove, replace, move, copy, test.
Antwort 422 mit Feldfehlern (eigenes Schema)
{ "fehler": "validierung", "felder": { …Feldname auf Liste von Meldungen.
Antwort 429 mit Retry-After (vollständig)
HTTP/1.1 429 Too Many Requests Retry-After: 30 X-RateLimit-Limit: 100 …
Mit Wartezeit und Limit-Headern.
Antwort 503 für Wartung mit Retry-After
HTTP/1.1 503 Service Unavailable Retry-After: 3600 Content-Type: application/problem+json …
Eine Stunde Wartezeit.
Antwort 304 Not Modified
HTTP/1.1 304 Not Modified ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Ohne Body.
Antwort 301 Moved PermanentlyReservierter Bereich
HTTP/1.1 301 Moved Permanently Location: https://example.com/neue-adresse
Mit Location.
Antwort auf OPTIONS
HTTP/1.1 204 No Content Allow: GET, POST, OPTIONS
Allow nennt die erlaubten Methoden.
Antwort 405 Method Not Allowed
HTTP/1.1 405 Method Not Allowed Allow: GET, HEAD Content-Type: application/problem+json …
405 muss einen Allow-Header enthalten.
Sammelanfrage mit Teilerfolgen (207-Stil)
{ "ergebnisse": [ { …Je Eintrag ein eigener Status.
Health-Check-Antwort
{ "status": "ok", "version": "1.4.2", …Typische Antwort von /health.
Health-Check-Antwort mit Fehler (503)
{ "status": "fehler", "abhaengigkeiten": { …Mit HTTP 503 senden.
Zeitangaben in JSON-APIs
{ "erstellt": "2026-10-09T08:00:00Z", "geaendert": "2026-10-09T10:00:00+02:00", …ISO 8601 mit Z oder Offset; unix = 2026-10-09T08:00:00Z als Sekunden.
Beträge in JSON: Cent als Ganzzahl
{ "betrag_cent": 11900, "waehrung": "EUR" …Ganzzahl in Cent vermeidet Rundungsfehler bei Fließkomma.
Beträge in JSON: Dezimalstring
{ "betrag": "119.00", "waehrung": "EUR" …Als Text, damit keine Fließkomma-Rundung entsteht.
POST-Anfrage mit JSON (Rohtext)Reservierter Bereich
POST /api/kunden HTTP/1.1 Host: example.com Content-Type: application/json …
CRLF-Zeilenenden, Leerzeile vor dem Body.
Antwort 200 mit JSON (Rohtext)Reservierter Bereich
HTTP/1.1 200 OK Date: Fri, 09 Oct 2026 08:00:00 GMT Content-Type: application/json; charset=utf-8 …
Content-Length nachgerechnet (alle Zeichen ASCII).