Idempotenz im API Design: Webhooks und praktische Beispiele
Idempotenz sorgt dafür, dass wiederholte API-Aufrufe dasselbe Ergebnis liefern, was besonders für Zahlungen, Bestellungen und Webhooks wichtig ist.
Kompakte Beschreibung
Idempotenz ist eine Eigenschaft von Operationen, die mehrfach ausgeführt werden können, ohne dass sich das Ergebnis ändert. Im API Design ist sie essenziell für zuverlässige und fehlertolerante Schnittstellen. GET, PUT und DELETE sind idempotent, POST in der Regel nicht. Für nicht idempotente Operationen wie POST oder externe Aufrufe wie Webhooks werden Idempotency Keys eingesetzt, um Doppelausführungen zu vermeiden. Webhooks sollten ebenfalls idempotent gestaltet werden, damit Empfänger gleiche Ereignisse mehrfach verarbeiten können, ohne Daten zu duplizieren. Eine gute Idempotenz-Strategie reduziert Fehler durch Netzwerkprobleme, Wiederholungen und Race Conditions und erhöht die Verlässlichkeit von APIs erheblich.
Wichtige Komponenten
Idempotente HTTP-Methoden
GET ist idempotent, weil es keine Zustandsänderung bewirkt. PUT ist idempotent, weil es eine Ressource vollständig ersetzt, egal wie oft es ausgeführt wird. DELETE ist idempotent, weil nach dem ersten Löschen die Ressource nicht mehr existiert und weitere Löschversuche denselben Endzustand ergeben. POST ist nicht idempotent, weil jeder Aufruf eine neue Ressource erstellen kann.
Idempotency Keys
Ein Idempotency Key ist ein eindeutiger Wert, den der Client bei einer Anfrage mitgibt. Der Server speichert den Key und das Ergebnis der ersten Anfrage. Bei einem wiederholten Aufruf mit demselben Key liefert der Server das gespeicherte Ergebnis zurück, anstatt die Operation erneut auszuführen. Das ist besonders wichtig für Zahlungen, Buchungen und Bestellungen.
Garantierte Idempotenz bei Zahlungen
Bei Zahlungs-APIs kann ein Netzwerkfehler dazu führen, dass der Client die Anfrage wiederholt. Ohne Idempotenz Key würde die Zahlung möglicherweise doppelt ausgeführt. Mit Idempotenz Key stellt der Server sicher, dass die Zahlung nur einmal durchgeführt wird, auch wenn der Client mehrfach anfragt.
Webhooks und Idempotenz
Webhooks sind vom Server ausgesendete Ereignisse an den Client. Sie können aufgrund von Timeouts oder Wiederholungen mehrfach eintreffen. Der Empfänger sollte Webhooks idempotent verarbeiten, indem er jedes Ereignis anhand einer eindeutigen Event-ID erkennt und Duplikate verwirft oder ignoriert.
Retry-Strategien und Idempotenz
Clients sollten nur idempotente Operationen automatisch wiederholen. GET und PUT können bei Netzwerkfehlern sicher wiederholt werden. POST darf nur wiederholt werden, wenn ein Idempotency Key verwendet wird. Ansonsten kann es zu ungewollten Doppelbuchungen kommen.
Speicherung von Idempotenz Keys
Idempotenz Keys müssen serverseitig für eine bestimmte Zeit gespeichert werden. Der Speicher kann eine Datenbank, ein Cache oder ein dedizierter Dienst sein. Wichtig ist, dass Keys mit dem Ergebnis der Operation verknüpft werden und nicht für unterschiedliche Anfragen wiederverwendet werden können.
TTL und Aufbewahrung
Idempotenz Keys sollten eine definierte Lebensdauer haben. Nach Ablauf der TTL kann der Key gelöscht werden. Der Client muss wissen, wie lange ein Key gültig ist, damit er ihn nicht zu spät wiederverwendet. Typische TTLs liegen zwischen Minuten und Tagen.
Race Conditions vermeiden
Wenn zwei Anfragen mit demselben Idempotency Key gleichzeitig eintreffen, muss der Server sicherstellen, dass nur eine Operation ausgeführt wird. Locking-Mechanismen oder atomare Datenbankoperationen helfen, Race Conditions zu vermeiden.
Fehlerbehandlung bei Idempotenz Keys
Wenn ein Idempotency Key ungültig oder abgelaufen ist, sollte die API eine klare Fehlermeldung zurückgeben. Der Client kann dann entscheiden, ob er die Operation mit einem neuen Key erneut ausführen möchte oder ob er den ursprünglichen Request erneut sendet.
Monitoring und Logs
Idempotenz Keys und wiederholte Anfragen sollten geloggt werden. Das hilft bei der Fehlersuche und ermöglicht es, Muster wie häufige Timeouts oder Doppelsendungen zu erkennen. Monitoring kann frühzeitig auf Probleme hinweisen.
Praxisbeispiel
Ein Online-Shop bietet eine API zum Erstellen von Bestellungen an. Der Client möchte sicherstellen, dass eine Bestellung nicht versehentlich doppelt angelegt wird.
Anfrage mit Idempotency Key:
POST /api/v1/orders
Content-Type: application/json
Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7
{
"customerId": 123,
"items": [
{ "productId": 42, "quantity": 2 }
]
}
Erstausführung:
HTTP/1.1 201 Created
Location: /api/v1/orders/98765
{
"orderId": 98765,
"status": "created",
"total": 79.97
}
Wiederholte Anfrage mit demselben Key:
POST /api/v1/orders
Content-Type: application/json
Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7
{
"customerId": 123,
"items": [
{ "productId": 42, "quantity": 2 }
]
}
Server erkennt den Key und liefert dasselbe Ergebnis:
HTTP/1.1 201 Created
Location: /api/v1/orders/98765
{
"orderId": 98765,
"status": "created",
"total": 79.97
}
Webhook mit Event-ID:
POST /webhooks/orders
Content-Type: application/json
X-Event-ID: event-12345-abcde
{
"eventType": "order.created",
"orderId": 98765,
"status": "created"
}
Der Empfänger speichert die X-Event-ID und verarbeitet gleiche IDs nur einmal. So bleibt die Verarbeitung idempotent, auch wenn der Webhook mehrfach gesendet wird.
FAQ: Idempotenz im API Design
1. Was ist Idempotenz?
2. Welche HTTP-Methoden sind idempotent?
3. Was ist ein Idempotency Key?
4. Warum ist Idempotenz bei Zahlungen wichtig?
5. Was ist ein Webhook?
6. Warum sollten Webhooks idempotent sein?
7. Wie erkennt man doppelte Webhooks?
8. Was passiert bei gleichzeitigen Anfragen mit demselben Idempotency Key?
9. Wie lange sollte ein Idempotency Key gespeichert werden?
10. Kann PATCH idempotent sein?
11. Was passiert bei einem ungültigen Idempotency Key?
12. Sollte man Idempotency Keys für alle POST Anfragen verwenden?
13. Was ist der Unterschied zwischen Idempotenz und Safe Methods?
14. Wie testet man Idempotenz?
15. Was hat Idempotenz mit Retry-Strategien zu tun?
Weiter im API Lernpfad
Der nächste Artikel im API Lernpfad behandelt Webhook Grundlagen — wie Webhooks funktionieren, wie man sie sicher implementiert und was es bei der Signaturprüfung zu beachten gilt.
Quellen
- https://www.rfc-editor.org/rfc/rfc9110
- https://stripe.com/docs/api/idempotent_requests
- https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-idempotency-key
Buchempfehlungen zur API-Entwicklung
Wenn Du Dich weiter mit Idempotenz, API Design 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.






