API Design Prinzipien
Gute API Design Prinzipien sorgen dafür, dass Schnittstellen verständlich, wartbar und skalierbar bleiben, sowohl für Entwickler als auch für automatisierte Clients.
Kompakte Beschreibung
API Design Prinzipien sind Leitlinien, die Du bei der Planung und Umsetzung von Schnittstellen befolgst, um konsistente, vorhersehbare und langfristig nutzbare APIs zu bauen. Im Mittelpunkt steht die Ressourcenorientierung, bei der Du Geschäftsobjekte wie Benutzer, Bestellungen oder Produkte als URLs modellierst und mit HTTP-Methoden darauf arbeitest. Eine gute API ist zustandslos, idempotent, versioniert und liefert eindeutige Fehlerantworten. Sie nutzt Pagination für große Datenmengen, Caching für Performance und klare Namenskonventionen für Lesbarkeit. Sicherheit, Dokumentation und Erweiterbarkeit werden von Anfang an berücksichtigt, nicht nachträglich hinzugefügt.
Ich arbeite derzeit extrem viel mit APIs, Z.B. für KI-Bots, KI-Chatoberflächen, oder um Dokumente wie Patente automatisch herunterzuladen und zu verarbeiten. Du wirst ein gutes API-Design lieben und sehr schnell unschöne Designs hassen.
Vielleicht fragst Du Dich, warum Du eine API-Schnittstelle programmieren solltest? Die Frage möchte ich Dir sehr kurz beantworten. “Für Deine eigenen Programme!”
Ja, ich programmiere viele Python-Tools und manchmal benötige ich diese in einem anderen Tool. Warum immer integrieren und den Code übernehmen, wenn ich darauf einfach per Schnittstelle zugreifen kann. So muss ich einen Bug auch nur an einer Stelle korrigieren.
Beispiel : Mein Fast-API-Framework benötigt einen Text-Cleaner und eine Dokumentenscript. Es war deutlich einfacher eine API zu erstellen, denn wenig später sind mir im Cleaner noch Fehler aufgefallen, die ich so nicht doppelt lösen musste.
Damit Du jedoch ordentliche API designst, gibt es ein paar gute Prinzipien/Regeln:
Wichtige Api-Design Komponenten
Ressourcenorientierung
Ressourcenorientierung bedeutet, dass Du Deine API um Geschäftsobjekte herum aufbaust.
Statt Funktionen oder Aktionen zu exposen, definierst Du Ressourcen und nutzt HTTP-Methoden, um diese zu lesen, zu erstellen, zu ändern oder zu löschen. Ein Artikel wird beispielsweise über /articles/123 angesprochen, nicht über /getArticle?id=123. Das macht die API intuitiv und leicht zu merken.
Konsistente Namenskonventionen
Verwende durchgehend Kleinbuchstaben, Bindestriche oder Unterstriche und Pluralformen. URLs wie /order-items, /customers und /invoices/42/payments sind einfach lesbar und folgen einer klaren Hierarchie. Vermeide KamelCase, Abkürzungen und unterschiedliche Schreibweisen für ähnliche Konzepte.
Zustandslosigkeit
Jede Anfrage an die API muss alle Informationen enthalten, die der Server für die Verarbeitung benötigt. Der Server speichert keinen Sitzungszustand zwischen Anfragen. Authentifizierungsinformationen werden in jedem Request übertragen, beispielsweise im Authorization Header. Das macht die API skalierbar und fehlerresistent.
Verben durch HTTP-Methoden ausdrücken
Nutze GET, POST, PUT, PATCH und DELETE korrekt. GET ist für lesende Zugriffe, POST für das Erstellen neuer Ressourcen, PUT für vollständige Ersetzungen, PATCH für partielle Updates und DELETE für das Löschen. Vermeide Aktionen in URLs wie /articles/123/delete.
Idempotenz
Idempotente Operationen liefern bei wiederholtem Aufruf dasselbe Ergebnis. GET, PUT und DELETE sind idempotent, POST normalerweise nicht. Für nicht idempotente Operationen kannst Du Idempotency Keys verwenden, um versehentliche Doppelbuchungen zu vermeiden. Das ist besonders wichtig für Zahlungen, Bestellungen und Reservierungen.
Versionierung
APIs ändern sich über Zeit. Eine klare Versionierung, beispielsweise über den Pfad /v1/customers oder über Header, ermöglicht es Clients, die API weiterhin zu nutzen, während Du neue Features einführst. Vermeide inkompatible Änderungen in bestehenden Versionen.
Klare Fehlerbehandlung
Fehlerantworten sollten konsistente HTTP-Statuscodes und aussagekräftige Fehlernachrichten enthalten. Verwende beispielsweise 400 Bad Request für ungültige Eingaben, 404 Not Found für unbekannte Ressourcen und 409 Conflict für Konflikte. Strukturierte Fehlerobjekte nach RFC 7807 helfen Clients, Fehler automatisch zu verarbeiten.
Pagination
Liefere große Ergebnismengen nicht auf einmal aus. Verwende Pagination, entweder über Seitenzahlen, Offset und Limit oder Cursor-basiert. Cursor-Pagination ist bei sehr großen Datensätzen und Echtzeitdaten besser geeignet, weil sie keine Probleme mit verschobenen Ergebnissen hat.
HATEOAS
HATEOAS steht für Hypermedia as the Engine of Application State. Die Antwort einer API enthält dann Links zu verwandten Ressourcen und möglichen Aktionen. So kann ein Client die API weitgehend dynamisch erkunden, ohne hartcodierte URLs zu kennen.
Caching und Performance
Nutze HTTP-Header wie ETag, Last-Modified und Cache-Control, um wiederholte Anfragen zu reduzieren. Caching senkt die Serverlast und verbessert die Antwortzeiten. Für statische oder selten wechselnde Daten ist ein längerer Cache sinnvoll, für Echtzeitdaten eher ein kurzer oder keiner.
Sicherheit von Anfang an
Verwende HTTPS, authentifiziere und autorisiere Zugriffe, validiere Eingaben und setze Rate Limiting ein. Vermeide sensible Daten in URLs, protokolliere sicherheitsrelevante Ereignisse und achte auf OWASP-Empfehlungen für APIs.
Dokumentation und Contracts
Eine API ist nur so gut wie ihre Dokumentation. OpenAPI Specification ermöglicht es Dir, die API maschinenlesbar zu beschreiben, Beispiele zu hinterlegen und Tests sowie Codegenerierung zu unterstützen.
Praxisbeispiel
Stell Dir einen Online-Shop vor, der Artikel, Kunden und Bestellungen verwaltet. Die API könnte folgende Ressourcen anbieten:
GET /api/v1/products Liste aller Produkte mit Pagination
GET /api/v1/products/42 Detailansicht eines Produkts
POST /api/v1/orders Neue Bestellung anlegen
PUT /api/v1/orders/123 Bestellung vollständig ersetzen
PATCH /api/v1/orders/123/status Bestellstatus aktualisieren
DELETE /api/v1/orders/123 Bestellung löschen
GET /api/v1/orders/123/items Positionen einer Bestellung
Eine POST-Anfrage für eine neue Bestellung könnte so aussehen:
POST /api/v1/orders
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Idempotency-Key: 9f8e7d6c-5b4a-3210-9f8e-7d6c5b4a3210
{
"customerId": 123,
"items": [
{ "productId": 42, "quantity": 2 },
{ "productId": 7, "quantity": 1 }
],
"shippingAddress": {
"street": "Musterstraße 12",
"city": "Berlin",
"zip": "10115"
}
}
Die Antwort bei erfolgreicher Erstellung:
HTTP/1.1 201 Created
Location: /api/v1/orders/98765
Content-Type: application/json
{
"orderId": 98765,
"status": "created",
"total": 79.97,
"links": {
"self": "/api/v1/orders/98765",
"items": "/api/v1/orders/98765/items",
"cancel": "/api/v1/orders/98765/cancel"
}
}
FAQ: API Design Prinzipien
1. Was bedeutet ressourcenorientiertes API Design?
2. Warum sollte eine API zustandslos sein?
3. Was ist Idempotenz und warum ist sie wichtig?
4. Welche HTTP-Methoden sollten in einer REST API verwendet werden?
5. Wie versioniert man eine API sinnvoll?
6. Was ist HATEOAS?
7. Warum ist Pagination wichtig?
8. Was sind Problem Details?
9. Was ist der Unterschied zwischen PUT und PATCH?
10. Wie sollten URLs in einer REST API aufgebaut sein?
11. Was ist ein Idempotency Key?
12. Warum ist HTTPS für APIs Pflicht?
13. Was ist Content Negotiation?
14. Was ist API Rate Limiting?
15. Warum ist API Dokumentation wichtig?
Weiter im API Lernpfad
Der nächste Artikel im API Lernpfad behandelt API-First-Design-Prinzipien — warum die API-Spezifikation vor der Implementierung stehen sollte und wie API-Driven Development funktioniert.
Quellen
- https://www.rfc-editor.org/rfc/rfc9110
- https://www.rfc-editor.org/rfc/rfc7807
- https://swagger.io/specification/
- https://developer.mozilla.org/docs/Web/API
Buchempfehlungen zur API-Entwicklung
Wenn Du Dich weiter mit API Design, REST und Softwarearchitektur beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:
API-Entwicklung
Bücher über API-Design, REST, GraphQL, OpenAPI und API-Architektur
REST und HTTP: Entwicklung und Integration nach REST-Prinzipien von Stefan Tilkov
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
API-Design: Praxishandbuch für Java- und Webservice-Entwickler
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.
Microservices: Grundlagen flexibler Softwarearchitekturen von Eberhard Wolff
Bei Amazon ansehenAffiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.






