Eine exzellent gestaltete REST-API ist das Rückgrat jeder erfolgreichen Webanwendung. Während gut durchdachte Schnittstellen die Integration für Entwickler zum Vergnügen machen, führen inkonsistente Endpunkte zu endlosen Support-Tickets und Fehlern. In diesem Guide erfahren Sie, wie Sie APIs nach Industriestandards entwerfen – inspiriert von Vorbildern wie Stripe, GitHub und Twilio.
1. Substantive statt Verben in URLs verwenden
REST ist ressourcenorientiert. Das bedeutet, dass URLs Dinge (Substantive) identifizieren sollten und keine Aktionen (Verben). Die Aktion selbst wird durch die HTTP-Methode (GET, POST, PUT, DELETE) definiert. Dies hält die API sauber und intuitiv.
# ❌ Falsch: Verben in der URL (RPC-Stil) GET /getUser?id=42 POST /createUser POST /deleteUser?id=42 POST /updateUserEmail # ✅ Richtig: Ressourcenbasierte URLs (REST-Stil) GET /users/42 # Benutzer 42 abrufen POST /users # Neuen Benutzer erstellen DELETE /users/42 # Benutzer 42 löschen PATCH /users/42 # Bestimmte Felder von Benutzer 42 aktualisieren
2. Pluralformen für Kollektionen nutzen
Um Konsistenz zu gewährleisten, sollten Sie für Ressourcen-Endpunkte immer die Pluralform verwenden. Es wirkt natürlicher, wenn /users eine Liste von Benutzern zurückgibt und /users/42 auf ein spezifisches Element dieser Liste verweist:
GET /articles # Alle Artikel auflisten POST /articles # Einen neuen Artikel erstellen GET /articles/slug # Einen spezifischen Artikel abrufen PUT /articles/slug # Einen Artikel komplett ersetzen PATCH /articles/slug # Einzelne Felder eines Artikels ändern DELETE /articles/slug # Einen Artikel löschen
3. Semantisch korrekte HTTP-Methoden
Jede HTTP-Methode hat eine spezifische Bedeutung. Die Einhaltung dieser Semantik ist entscheidend für das Caching und die Vorhersehbarkeit Ihrer API:
- GET — Daten abrufen. Muss sicher sein (keine Seiteneffekte) und idempotent (mehrfache Aufrufe liefern das gleiche Ergebnis).
- POST — Eine neue Ressource erstellen. Nicht idempotent – zwei Aufrufe erstellen zwei Datensätze.
- PUT — Eine Ressource vollständig ersetzen. Idempotent.
- PATCH — Teilweise Aktualisierung (nur geänderte Felder senden).
- DELETE — Eine Ressource entfernen. Idempotent – das Löschen einer bereits gelöschten Ressource sollte 404 liefern, aber keinen Systemfehler auslösen.
4. Präzise HTTP-Statuscodes zurückgeben
Statuscodes sind die Sprache der Kommunikation zwischen Server und Client. Sie ersparen es dem Client, den Response-Body mühsam nach Fehlern zu durchsuchen. Ein 200 OK für eine fehlgeschlagene Anfrage ist ein absolutes No-Go.
200 OK # Erfolg bei GET, PATCH, DELETE 201 Created # Erfolg bei POST (liefert die neue Ressource) 204 No Content # Erfolg bei DELETE (kein Inhalt zurückgegeben) 400 Bad Request # Ungültige Syntax oder Validierungsfehler 401 Unauthorized # Fehlende oder ungültige Authentifizierung 403 Forbidden # Authentifiziert, aber keine Berechtigung 404 Not Found # Ressource existiert nicht 409 Conflict # Konflikt (z. B. E-Mail-Adresse bereits vergeben) 422 Unprocessable # Syntaktisch korrekt, aber semantisch falsch 429 Too Many Requests # Rate Limit überschritten 500 Internal Server Error # Unerwarteter Serverfehler
5. Einheitliche Fehlerantworten gestalten
Wenn etwas schiefgeht, benötigen Entwickler klare Informationen. Strukturieren Sie Fehlerobjekte immer identisch, damit Clients sie generisch verarbeiten können:
{
"error": {
"status": 422,
"code": "VALIDATION_ERROR",
"message": "Die Eingabedaten sind ungültig.",
"details": [
{
"field": "email",
"message": "Muss eine gültige E-Mail-Adresse sein."
},
{
"field": "password",
"message": "Das Passwort muss mindestens 8 Zeichen lang sein."
}
]
}
}
6. Versionierung von Anfang an einplanen
Schnittstellen verändern sich. Ohne Versionierung führen "Breaking Changes" dazu, dass alle bestehenden Integrationen abstürzen. Die gängigste Methode ist die Versionierung über die URL:
- URL-Versionierung (Empfohlen):
/api/v1/users— Einfach zu testen und für Caching-Layer transparent. - Header-Versionierung:
Accept: application/vnd.myapi.v2+json— Hält die URL sauber, ist aber schwerer zu debuggen.
Erhöhen Sie die Hauptversion (v1 zu v2) nur bei inkompatiblen Änderungen. Das Hinzufügen neuer Felder oder Endpunkte gilt nicht als Breaking Change.
7. Paginierung für große Datenmengen
Geben Sie niemals eine unbegrenzte Anzahl von Datensätzen zurück. Dies belastet die Datenbank und den Client. Implementieren Sie Paginierung und liefern Sie Metadaten mit:
{
"data": [
{ "id": "usr_abc123", "name": "Max Mustermann" },
{ "id": "usr_def456", "name": "Erika Musterfrau" }
],
"pagination": {
"total": 1250,
"page": 1,
"per_page": 20,
"next_cursor": "usr_def456",
"has_more": true
}
}
8. Sicherheit: HTTPS ist Pflicht
Jede API muss ausschließlich über HTTPS erreichbar sein. Da APIs oft sensible Daten wie Passwörter oder API-Keys übertragen, dürfen diese niemals im Klartext über das Netzwerk gesendet werden. Unverschlüsseltes HTTP ist im Jahr 2025 nicht mehr akzeptabel.
9. Rate Limiting implementieren
Schützen Sie Ihre Infrastruktur vor Missbrauch und DoS-Angriffen. Nutzen Sie Standard-Header, um dem Client mitzuteilen, wie viele Anfragen noch erlaubt sind:
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 734 X-RateLimit-Reset: 1718481600
Wird das Limit überschritten, sollte die API mit 429 Too Many Requests und einem Retry-After Header antworten.
10. Umfassende Dokumentation (OpenAPI)
Eine API ohne Dokumentation ist für externe Entwickler nutzlos. Verwenden Sie die OpenAPI-Spezifikation (ehemals Swagger). Damit lassen sich interaktive Dokumentationen, Client-SDKs und automatisierte Tests erstellen, was die Akzeptanz Ihrer API massiv erhöht.
JSON-Daten sofort validieren und optimieren
Formatieren Sie Ihre API-Antworten für besseres Debugging oder komprimieren Sie JSON-Payloads für die Produktion mit unseren kostenlosen Tools.