REST API-Grundlagen
REST (Representational State Transfer) ist ein Architekturstil für die Entwicklung von Webdiensten. Er definiert eine Reihe von Prinzipien und Konventionen, die es Entwicklern ermöglichen, skalierbare, wartbare und gut strukturierte APIs zu erstellen.
Was ist REST?
Abschnitt betitelt „Was ist REST?“REST wurde im Jahr 2000 von Roy Fielding in seiner Doktorarbeit eingeführt. Es ist kein Protokoll oder Standard, sondern ein Architekturkonzept, das auf folgenden Grundprinzipien basiert:
- Ressourcenorientierung: Daten und Funktionalitäten werden als Ressourcen betrachtet
- Zustandslosigkeit: Jede Anfrage enthält alle notwendigen Informationen
- Einheitliche Schnittstelle: Konsistente Art der Kommunikation
- Client-Server-Architektur: Klare Trennung von Client und Server
- Cacheable: Antworten können zwischengespeichert werden
Ressourcen und Endpunkte
Abschnitt betitelt „Ressourcen und Endpunkte“In einer REST-API wird alles als Ressource betrachtet. Eine Ressource ist ein Objekt oder eine Darstellung von etwas, auf das durch einen URI (Uniform Resource Identifier) zugegriffen werden kann.
Beispiele für Ressourcen:
Abschnitt betitelt „Beispiele für Ressourcen:“/users- Alle Benutzer/users/123- Ein spezifischer Benutzer mit der ID 123/posts- Alle Beiträge/posts/456/comments- Alle Kommentare zu Beitrag 456
Gut gestaltete Endpunkte:
Abschnitt betitelt „Gut gestaltete Endpunkte:“- Verwenden Sie Substantive, keine Verben für Ressourcennamen
- ✅
/articles - ❌
/getArticles - Verwenden Sie Pluralformen für Sammlungen
- ✅
/users - ❌
/user - Verwenden Sie verschachtelte Ressourcen für Beziehungen
- ✅
/users/123/posts - ❌
/userPosts/123
HTTP-Methoden in REST
Abschnitt betitelt „HTTP-Methoden in REST“REST nutzt die Standard-HTTP-Methoden, um verschiedene Operationen auf Ressourcen durchzuführen:
| HTTP-Methode | CRUD-Operation | Beschreibung |
|---|---|---|
| GET | Read | Daten abrufen ohne Änderungen vorzunehmen |
| POST | Create | Neue Ressourcen erstellen |
| PUT | Update/Replace | Ressourcen vollständig aktualisieren/ersetzen |
| PATCH | Update/Modify | Ressourcen teilweise aktualisieren |
| DELETE | Delete | Ressourcen löschen |
Typische Verwendung:
Abschnitt betitelt „Typische Verwendung:“GET /users // Alle Benutzer abrufenGET /users/123 // Einen spezifischen Benutzer abrufenPOST /users // Einen neuen Benutzer erstellenPUT /users/123 // Einen Benutzer vollständig aktualisierenPATCH /users/123 // Einen Benutzer teilweise aktualisierenDELETE /users/123 // Einen Benutzer löschenZustandslosigkeit
Abschnitt betitelt „Zustandslosigkeit“Eine der wichtigsten Eigenschaften von REST ist die Zustandslosigkeit. Das bedeutet:
- Jede Anfrage enthält alle notwendigen Informationen
- Der Server speichert keine Informationen über frühere Anfragen des Clients
- Jede Anfrage wird unabhängig von vorherigen Anfragen verarbeitet
- Authentifizierung erfolgt in der Regel über Tokens (z.B. JWT), die mit jeder Anfrage gesendet werden
Dies macht REST-APIs skalierbar und einfach zu warten.
Anfragen und Antworten
Abschnitt betitelt „Anfragen und Antworten“Anfragen (Requests)
Abschnitt betitelt „Anfragen (Requests)“Eine typische REST-Anfrage besteht aus:
- HTTP-Methode (GET, POST, etc.)
- Endpunkt (URI)
- Header (Content-Type, Authorization, etc.)
- Daten im Body (bei POST, PUT, PATCH)
Beispiel einer POST-Anfrage:
POST /api/users HTTP/1.1Host: example.comContent-Type: application/jsonAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
{ "name": "Max Mustermann", "email": "max@example.com", "age": 30}Antworten (Responses)
Abschnitt betitelt „Antworten (Responses)“Eine typische REST-Antwort besteht aus:
- Statuscode (200, 201, 404, etc.)
- Header (Content-Type, etc.)
- Daten im Body (meist JSON)
Beispiel einer Antwort:
HTTP/1.1 201 CreatedContent-Type: application/json
{ "id": 456, "name": "Max Mustermann", "email": "max@example.com", "age": 30, "createdAt": "2025-06-04T09:00:00Z"}Statuscode-Verwendung in REST
Abschnitt betitelt „Statuscode-Verwendung in REST“Die Wahl des richtigen Statuscodes ist wichtig für eine gut gestaltete REST-API:
| Statuscode | Beschreibung | Typische Verwendung |
|---|---|---|
| 200 OK | Erfolgreiche Anfrage | GET, PATCH, PUT erfolgreich |
| 201 Created | Ressource erstellt | POST erfolgreich |
| 204 No Content | Erfolg ohne Inhalt | DELETE erfolgreich |
| 400 Bad Request | Ungültige Anfrage | Validierungsfehler |
| 401 Unauthorized | Authentifizierung erforderlich | Fehlende/ungültige Anmeldedaten |
| 403 Forbidden | Keine Berechtigung | Zugriff verweigert |
| 404 Not Found | Ressource nicht gefunden | Ungültige URL/ID |
| 409 Conflict | Konflikt | Versionskonflikt |
| 500 Internal Server Error | Serverfehler | Unbehandelte Ausnahmen |
Best Practices für REST-APIs
Abschnitt betitelt „Best Practices für REST-APIs“1. Versionierung
Abschnitt betitelt „1. Versionierung“Versionieren Sie Ihre API, um Änderungen ohne Unterbrechung bestehender Clients einzuführen:
https://api.example.com/v1/usershttps://api.example.com/v2/users2. Filterung, Sortierung und Paginierung
Abschnitt betitelt „2. Filterung, Sortierung und Paginierung“Unterstützen Sie Query-Parameter für:
- Filterung:
GET /users?status=active - Sortierung:
GET /users?sort=name&order=asc - Paginierung:
GET /users?page=2&limit=10
3. Fehlerbehandlung
Abschnitt betitelt „3. Fehlerbehandlung“Liefern Sie aussagekräftige Fehlermeldungen:
{ "error": { "code": 404, "message": "Benutzer mit ID 123 wurde nicht gefunden", "details": "Die angeforderte Ressource existiert nicht in der Datenbank" }}Zusammenfassung
Abschnitt betitelt „Zusammenfassung“REST ist ein weit verbreiteter Architekturstil für Webdienste:
- Es basiert auf Ressourcen, die durch URIs identifiziert werden
- Es nutzt Standard-HTTP-Methoden (GET, POST, PUT, PATCH, DELETE)
- Es ist zustandslos, was die Skalierbarkeit verbessert
- Es verwendet standardisierte Statuscodes zur Kommunikation des Anfrageergebnisses
Durch das Verständnis und die Anwendung von REST-Prinzipien können Sie gut strukturierte, skalierbare und wartbare APIs erstellen, die leicht von Client-Anwendungen zu nutzen sind.
Im MERN Stack wird REST häufig verwendet, um die Kommunikation zwischen dem React-Frontend und dem Express-Backend zu strukturieren, was zu einer klaren Trennung der Verantwortlichkeiten und einer besseren Codeorganisation führt.