API Architecture

REST APIs

REST ist ein Stil für das Design von HTTP APIs rund um Ressourcen. Wenn Nomen, Methoden und Statuscodes stimmen, fühlt sich Ihre API für jeden Client intuitiv an.

intermediate15 min readUpdated 15. Sept. 2026
routes.js
js
// routes.js
import { Router } from "express";

const router = Router();

router.get("/posts", listPosts);
router.post("/posts", createPost);
router.get("/posts/:id", getPost);
router.patch("/posts/:id", updatePost);
router.delete("/posts/:id", deletePost);

export default router;
Stil
Ressourcenorientiert
Nomen
URIs benennen Ressourcen
Verben
HTTP-Methoden
Zustand
Stateless Requests
Format
Meistens JSON
Codes
Statuscodes sind entscheidend

Warum es wichtig ist

Warum REST immer noch funktioniert

Vertraut und universell

Jeder HTTP-Client versteht bereits Methoden, Statuscodes und Header, sodass es nichts Spezielles zu lernen gibt.

Vorhersehbare Ressourcen

Konsistente Benennung und ein einheitliches Verhalten ermöglichen es Clients, Endpunkte zu erraten und Antworten ohne Sonderfälle zu verarbeiten.

Cachebar und zustandslos

Eigenständige Requests funktionieren mit Caches, Proxies und Load Balancern, was die Skalierung vereinfacht.

Das Gesamtbild

Die drei Grundideen hinter REST

Ressourcen modellieren, HTTP-Methoden für Aktionen nutzen und jeden Request eigenständig halten.

Ressourcen

Modell

Nomen in URLs repräsentieren Dinge, unterteilt in Kollektionen und einzelne Elemente.

Methoden

Aktion

GET, POST, PUT, PATCH und DELETE beschreiben mit klarer Semantik, was zu tun ist.

Repräsentation

Antwort

Ein Statuscode, Header und ein JSON-Body beschreiben das Ergebnis.

REST auf einen Blick

Der Kern von REST

Nomen, keine Verben

Nutzen Sie /posts und /posts/42, nicht /getPosts oder /createPost.

Methoden

GET liest, POST erstellt, PUT ersetzt, PATCH aktualisiert, DELETE entfernt.

Statuscodes

200, 201, 204, 400, 401, 403, 404, 409 und 422 haben jeweils eine spezifische Bedeutung.

Kollektionen und Elemente

Eine Plural-Kollektion und ein einzelnes Element per ID.

Filterung und Pagination

Query-Parameter für Filterung, Sortierung, Paging und Feldauswahl.

Konsistente Fehler

Ein einheitliches Fehlerformat mit Code, Nachricht und Details.

Eine kurze Geschichte

Von SOAP zu pragmatischem REST

  1. 2000

    REST beschrieben

    Roy Fielding benennt den Architekturstil in seiner Dissertation.

    00
  2. 2000s

    Web APIs wachsen

    JSON über HTTP wird zum Standard für Web-Services.

    2000s
  3. 2010s

    API-First Praxis

    Dokumentation, Versionierung und Pagination werden zur Erwartung.

    2010s
  4. 2015

    GraphQL und gRPC

    Alternativen erscheinen, aber REST bleibt der Standard für öffentliche APIs.

    15
  5. Heute

    Pragmatisches REST

    Teams wenden die nützlichen Teile von REST an, ohne nach absoluter Reinheit zu streben.

    Heute

Der vollständige Leitfaden

REST APIs: Alles was Sie wissen müssen

Was ist REST?

REST, oder Representational State Transfer, ist ein Architekturstil für das Design von HTTP APIs. Anstatt eigene Befehle zu erfinden, modellieren Sie Ihren Domain-Bereich als Ressourcen und nutzen die bereits von HTTP definierten Methoden, um mit diesen zu interagieren. Ein POST /posts erstellt einen Post, GET /posts/42 liest einen aus, PATCH /posts/42 aktualisiert ihn und DELETE /posts/42 löscht ihn.

Der große Vorteil ist die Vertrautheit. Jeder HTTP Client, Proxy, Cache und jedes Tool versteht bereits die Methoden, Statuscodes und Header. Wenn Sie sich an die Konventionen halten, können Clients vorhersagen, wie sich Ihre API verhält, ohne ein spezielles Handbuch lesen zu müssen.

Ressourcen und URIs

Ressourcen sind die Substantive Ihrer API. Verwenden Sie Pluralformen für Collections und identifizieren Sie einzelne Elemente über eine id.

GET    /posts
POST   /posts
GET    /posts/42
PUT    /posts/42
PATCH  /posts/42
DELETE /posts/42
  • Verwenden Sie Substantive, keine Verben. Die Methode ist das Verb.
  • Verwenden Sie konsistent Pluralformen für Collection-Namen.
  • Schreiben Sie URLs kleingeschrieben mit Bindestrichen, nicht mit Unterstrichen oder in camelCase.
  • Nutzen Sie Nesting nur, wenn die Beziehung essenziell ist, wie bei /posts/42/comments.
  • Geben Sie das Format nicht im Pfad an; verwenden Sie stattdessen den Accept-Header.

Tiefes Nesting wird schnell unübersichtlich. /users/1/posts/2/comments/3 ist schwer aufzubauen und zu dokumentieren; bevorzugen Sie /comments/3 und lassen Sie die Clients filtern.

Methoden und ihre Semantik

Jede Methode hat definierte Semantiken, auf die sich Clients und die Infrastruktur verlassen.

Methode Zweck Safe Idempotent
GET Eine Ressource oder Kollektion lesen Ja Ja
POST Eine Ressource erstellen oder eine Aktion auslösen Nein Nein
PUT Eine Ressource ersetzen Nein Ja
PATCH Eine Ressource teilweise aktualisieren Nein Nein
DELETE Eine Ressource entfernen Nein Ja

Safe bedeutet, dass der Zustand nicht verändert wird; idempotent bedeutet, dass eine wiederholte Ausführung denselben Effekt hat wie eine einmalige Ausführung. Ändern Sie niemals Daten mit GET, da Clients, Crawler und Caches GET-Requests beliebig oft ausführen können.

Status-Codes

Geben Sie den Code zurück, der dem tatsächlichen Ergebnis entspricht. Dies ist der Teil, auf den sich Clients am stärksten verlassen.

  • 200 OK — Erfolg mit Body.
  • 201 Created — eine Ressource wurde erstellt; fügen Sie einen Location-Header hinzu.
  • 204 No Content — Erfolg ohne Body, häufig bei DELETE.
  • 400 Bad Request — fehlerhafte Anfrage.
  • 401 Unauthorized — Authentifizierung fehlt oder ist ungültig.
  • 403 Forbidden — authentifiziert, aber nicht berechtigt.
  • 404 Not Found — Ressource nicht gefunden.
  • 409 Conflict — Zustandskonflikt, zum Beispiel ein Duplikat.
  • 422 Unprocessable Entity — syntaktisch korrekt, aber die Validierung ist fehlgeschlagen.
  • 429 Too Many Requests — Rate Limit erreicht; fügen Sie Retry-After hinzu.
  • 500 Internal Server Error — unerwarteter Serverfehler.

Die Rückgabe von 200 mit { "success": false } verbirgt Fehler vor Clients, Caches und Monitoring-Systemen und zwingt jeden Client dazu, ein eigenes Error-Handling zu implementieren.

Collections: Filtern, Sortieren und Pagination

Collections benötigen eine konsistente Abfragesprache.

GET /posts?status=published&sort=-createdAt&limit=20&cursor=abc123
  • Filtern mit field=value und wiederholten Keys für OR.
  • Sortieren mit sort=field oder sort=-field für absteigende Reihenfolge.
  • Pagination mit limit und cursor (oder page und perPage).
  • Feldauswahl mit fields=id,title, wenn Clients weniger Daten benötigen.
  • Suche über einen dedizierten q-Parameter.

Bevorzuge Cursor-Pagination für große oder sich häufig ändernde Datensätze und gib immer den nächsten Cursor in der Antwort zurück, damit Clients paginieren können, ohne raten zu müssen.

{
  "data": [{ "id": "42", "title": "Hello" }],
  "pagination": { "nextCursor": "abc123", "hasMore": true }
}

Repräsentationen und Antworten

Antworten sind Repräsentationen von Ressourcen. JSON ist hierbei der Standard mit einer stabilen Struktur.

{
  "id": "42",
  "title": "Hello",
  "createdAt": "2026-09-15T10:00:00Z"
}
  • Verwenden Sie konsistent entweder camelCase oder snake_case, aber nicht beides.
  • Verwenden Sie für Datumsangaben Strings im ISO 8601 Format.
  • Verwenden Sie stabile IDs als Strings, falls Clients die Präzision von Zahlen überschreiten könnten.
  • Umschließen Sie Collections mit data und pagination, aber geben Sie einzelne Ressourcen direkt zurück.
  • Unterstützen Sie Accept und setzen Sie Content-Type korrekt.

Zustandslosigkeit und Caching

Jeder Request sollte alle Informationen enthalten, die für seine Verarbeitung benötigt werden: die URL, die Methode, Header und den Body. Verlassen Sie sich nicht auf den Serverspeicher zwischen einzelnen Requests – genau das ermöglicht es Ihnen, viele Instanzen hinter einem Load Balancer zu betreiben.

Da GET-Requests sicher sind und die Antworten in sich geschlossen sind, funktioniert REST hervorragend mit HTTP-Caching. Setzen Sie Cache-Control und Validatoren wie ETag bei cachebaren Ressourcen, wie im HTTP-Guide beschrieben.

Fehler

Verwenden Sie überall ein einheitliches Fehlerformat und dokumentieren Sie dieses.

{
  "error": {
    "code": "validation_error",
    "message": "Title is required",
    "details": [{ "field": "title", "issue": "required" }]
  }
}

Ein maschinenlesbarer code ermöglicht es Clients, entsprechende Logik-Zweige auszuführen, eine message kann sicher an Benutzer angezeigt werden und details hilft Formularen dabei, entsprechende Felder hervorzuheben. Kombinieren Sie dies mit dem passenden Statuscode.

Best Practices

  • Modellieren Sie Ressourcen mit Substantiven und lassen Sie Methoden die Aktionen ausdrücken.
  • Geben Sie den spezifischsten Statuscode zurück, den Sie verwenden können.
  • Versionieren Sie die API, bevor es notwendig wird, und dokumentieren Sie diese (siehe API Versioning).
  • Implementieren Sie eine Paginierung für jede Collection und begrenzen Sie diese auf limit.
  • Validieren Sie Eingaben und geben Sie strukturierte Fehler zurück.
  • Verwenden Sie durchgehend eine konsistente Benennung und Schreibweise.
  • Cachen Sie sichere GET-Antworten mit expliziten Headern.
  • Implementieren Sie Rate Limiting und Authentifizierung (siehe Rate Limiting).

Häufige Fehler

  • Verb-basierte URLs, die HTTP-Methoden duplizieren.
  • Rückgabe von 200 bei Fehlern.
  • Unbegrenzte Collections ohne Pagination.
  • Inkonsistente Groß-/Kleinschreibung, Datumsformate oder Fehlerstrukturen.
  • Tiefe Verschachtelungen, die unwartbar werden.
  • Mutation des State bei GET.
  • Breaking Changes für Clients durch stillschweigende Änderung der Response-Strukturen.

Wie geht es weiter?

REST ist der Standardweg, um ein Backend bereitzustellen. Vertiefen Sie Ihr Wissen im HTTP-Guide, dokumentieren Sie Ihre Schnittstellen mit OpenAPI, entwickeln Sie diese sicher mithilfe von API Versioning weiter und schützen Sie Ihr System durch Rate Limiting. Vergleichen Sie dieses Modell mit GraphQL, wenn Ihre Clients mehr Flexibilität benötigen.

Benennung eines Endpunkts

Benennen Sie die Ressource mit einem Nomen und lassen Sie die Methode die Aktion ausdrücken. Verb-basierte Pfade duplizieren HTTP und vervielfachen die Endpunkte.

Bevorzugt
GET    /posts
POST   /posts
GET    /posts/42
PATCH  /posts/42
DELETE /posts/42
Vermeiden
GET  /getPosts
POST /createPost
POST /updatePost?id=42
POST /deletePost?id=42

Fehler zurückgeben

Nutzen Sie den Statuscode, der zum Fehler passt, und einen konsistenten Error-Body. Die Rückgabe von 200 bei einem Fehler verbirgt Probleme vor Clients und Caches.

Bevorzugt
// HTTP/1.1 422 Unprocessable Entity
{
  "error": {
    "code": "validation_error",
    "message": "Title is required",
    "details": [{ "field": "title" }]
  }
}
Vermeiden
// HTTP/1.1 200 OK
{ "success": false, "error": "bad input" }

Abwägungen

Ist REST die richtige Standardwahl?

REST passt zu den meisten APIs, weil HTTP Caching, Tooling und Vertrautheit bereits mitbringt. Wisse, wo es an Grenzen stößt, bevor du dich festlegst.

Strengths

  • Für jeden Client vertraut

    Methoden, Statuscodes und Header werden von Browsern, Proxys, Caches und Bibliotheken verstanden, sodass Clients das Verhalten deiner API vorhersagen können.

  • Caching ohne Aufwand

    GET-Antworten sind pro URL cachefähig, sodass CDNs, Browser und Gateways Last von deinen Servern nehmen.

  • Einfach zu entwerfen und zu debuggen

    Ressourcen lassen sich sauber auf Substantive abbilden und jede Anfrage ist unabhängig, sodass ein Endpoint leicht zu durchschauen und isoliert zu testen ist.

Trade-offs

  • Zu viele und zu wenige Daten

    Eine feste Antwortstruktur liefert oft mehr Felder als ein Bildschirm braucht oder erzwingt mehrere Roundtrips, um eine Ansicht zusammenzusetzen.

  • Gesprächig bei komplexen Ansichten

    Verschachtelte oder verwandte Daten bedeuten mehrere Anfragen, was mobile Clients in langsamen Netzen belastet.

  • Versionierung ist Handarbeit

    Ohne Hypermedia kodieren Clients URLs fest, sodass die Weiterentwicklung der API explizite Versionierung und Deprecation erfordert.

Häufig gestellte Fragen

Häufig gestellte Fragen

Keep learning

Related topics from the roadmap.

$ Lernen Sie jetzt

Bereit, REST APIs zu lernen?

Unser interaktives Tutorial führt Sie Schritt für Schritt durch REST APIs — mit Quizzen und echtem Code, den Sie im Browser ausführen können.