REST-API-Grundlagen#
Eine API (Application Programming Interface) ist eine Programmierschnittstelle, über die Anwendungen miteinander Daten austauschen und Funktionen aufrufen können, ohne die interne Implementierung des jeweils anderen Systems zu kennen. REST (Representational State Transfer) ist der heute meistgenutzte Architekturstil, um solche Schnittstellen über HTTP bereitzustellen — er bildet die Grundlage für den Großteil moderner Web- und Cloud-Anwendungen.
REST-Prinzipien#
REST ist kein Protokoll, sondern ein Satz von Architekturprinzipien für den Entwurf von Web-Schnittstellen:
- Zustandslosigkeit (stateless): Jede Anfrage enthält alle Informationen, die der Server zur Bearbeitung benötigt. Der Server speichert keinen Sitzungszustand zwischen zwei Anfragen — das erleichtert Skalierung, da jede Anfrage unabhängig von einem beliebigen Server beantwortet werden kann.
- Ressourcen über URIs: Jede Ressource (z. B. ein Kunde, eine Bestellung) wird über eine eindeutige Adresse angesprochen, z. B.
/api/kunden/42. Ressourcen sind Substantive, keine Aktionen — die Aktion ergibt sich aus der HTTP-Methode. - Einheitliche Schnittstelle (uniform interface): Alle Ressourcen werden über dieselben, standardisierten HTTP-Methoden angesprochen (GET, POST, PUT, PATCH, DELETE). Das macht APIs vorhersehbar und einheitlich nutzbar.
- Client-Server-Trennung: Client (z. B. Web- oder Mobile-App) und Server (Datenhaltung, Logik) sind strikt getrennt und können unabhängig voneinander weiterentwickelt werden.
- Zustandsrepräsentation: Ressourcen werden in einer Repräsentation übertragen, meist als JSON, seltener XML.
HTTP-Methoden im REST-Kontext#
Jede HTTP-Methode hat im REST-Kontext eine feste, konventionelle Bedeutung:
| Methode | Zweck | Typisches Beispiel |
|---|---|---|
| GET | Ressource(n) lesen, keine Änderung | GET /kunden/42 — Kundendaten abrufen |
| POST | Neue Ressource anlegen | POST /kunden — neuen Kunden erstellen |
| PUT | Ressource vollständig ersetzen | PUT /kunden/42 — Kundendatensatz komplett überschreiben |
| PATCH | Ressource teilweise ändern | PATCH /kunden/42 — nur die Telefonnummer aktualisieren |
| DELETE | Ressource löschen | DELETE /kunden/42 — Kunden entfernen |
GET und DELETE gelten als idempotent — mehrfaches Ausführen derselben Anfrage führt zum gleichen Endzustand. PUT ist ebenfalls idempotent (das vollständige Ersetzen mit denselben Daten ändert nichts weiter), POST dagegen nicht — jeder Aufruf legt eine neue Ressource an.
HTTP-Statuscodes#
Der Server signalisiert das Ergebnis einer Anfrage über einen dreistelligen Statuscode, dessen erste Ziffer die Kategorie angibt:
| Bereich | Kategorie | Bedeutung |
|---|---|---|
| 2xx | Erfolg | Anfrage wurde erfolgreich verarbeitet |
| 3xx | Umleitung | Weitere Aktion nötig, z. B. Ressource verschoben |
| 4xx | Client-Fehler | Fehlerhafte Anfrage seitens des Clients |
| 5xx | Server-Fehler | Fehler bei der Verarbeitung auf dem Server |
Die häufigsten Codes in der Praxis:
| Code | Bedeutung | Beispiel |
|---|---|---|
| 200 OK | Anfrage erfolgreich | GET liefert die angeforderte Ressource |
| 201 Created | Ressource erfolgreich angelegt | Antwort auf ein erfolgreiches POST |
| 400 Bad Request | Anfrage fehlerhaft formuliert | Ungültiges JSON im Request-Body |
| 401 Unauthorized | Authentifizierung fehlt/ungültig | Kein oder falscher Zugangsnachweis |
| 403 Forbidden | Zugriff verweigert | Nutzer authentifiziert, aber nicht berechtigt |
| 404 Not Found | Ressource existiert nicht | /kunden/9999 gibt es nicht |
| 500 Internal Server Error | Unerwarteter Serverfehler | Ausnahme in der Serverlogik |
Ablauf einer REST-Anfrage#
sequenceDiagram actor Client participant API as REST-API participant Server participant DB as Datenbank Client->>API: GET /kunden/42 API->>Server: Anfrage verarbeiten Server->>DB: Kunde mit ID 42 abfragen DB-->>Server: Datensatz Server-->>API: Ergebnis aufbereiten API-->>Client: 200 OK + JSON-Repräsentation
REST vs. SOAP#
Neben REST gibt es mit SOAP (Simple Object Access Protocol) einen älteren, formaleren Ansatz für Web-Services:
| Kriterium | REST | SOAP |
|---|---|---|
| Architekturstil | Architekturprinzipien, kein Standard | Striktes Protokoll |
| Datenformat | Meist JSON, auch XML möglich | Ausschließlich XML |
| Transport | Nutzt HTTP-Methoden direkt | HTTP nur als Transporthülle, eigener Envelope |
| Overhead | Gering, kompakt | Hoch, viel XML-Boilerplate |
| Standardisierung | Locker, konventionsbasiert | Sehr formal (WSDL, XSD-Schema) |
| Fehlerbehandlung | HTTP-Statuscodes | Eigenes SOAP-Fault-Element |
| Typischer Einsatz | Moderne Web-/Mobile-APIs | Legacy-Systeme, Banken, Behörden mit hohen Formalanforderungen |
Prüfungsbeispiele#
„Ein Client ruft zweimal hintereinander dieselbe PUT-Anfrage auf. Welches REST-Prinzip garantiert, dass der Endzustand der Ressource gleich bleibt?"
→ Die Idempotenz der PUT-Methode: Ein wiederholtes vollständiges Ersetzen mit denselben Daten führt zu keinem weiteren Zustandswechsel.
„Ein Client fragt eine Ressource ab, die nicht existiert. Welchen HTTP-Statuscode sollte die API zurückgeben?"
→ 404 Not Found — die angefragte Ressource ist unter der angegebenen URI nicht vorhanden.
„Warum gilt REST als besser skalierbar als klassische SOAP-Services mit Sitzungszustand?"
→ Weil REST zustandslos (stateless) ist: Jede Anfrage trägt alle nötigen Informationen selbst, sodass beliebige Server sie unabhängig voneinander beantworten können — es muss kein Sitzungszustand zwischen Anfragen auf einem bestimmten Server gehalten werden.
Quiz#
❓ Welche HTTP-Methode wird verwendet, um eine Ressource vollständig zu ersetzen?
❓ Welche HTTP-Methoden gelten im REST-Kontext als idempotent?
❓ Ein Client fragt eine Ressource ab, die unter der angegebenen URI nicht existiert. Welchen Statuscode sollte die API zurückgeben?
❓ Was bedeutet 'zustandslos' (stateless) im REST-Kontext?
Siehe auch#
- datenformate — JSON als Standardformat für REST-API-Antworten
- api-authentifizierung — wie REST-APIs Zugriffe absichern
- protokolle ports — HTTP als Transportprotokoll für REST
- softwaredokumentation — API-Dokumentation mit Swagger/OpenAPI