Zum Inhalt springen
BeispielWerk
English

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).

Weitere Themen in Web & API