Skip to content
IRC-CodingIRC-Coding
IdempotenzIdempotency KeyREST APIWebhooksAPI DesignHTTP Methoden

Idempotenz im API Design: Webhooks, Idempotency Keys und praktische Beispiele

Lerne Idempotenz im API Design: Welche HTTP-Methoden idempotent sind, wie Idempotency Keys funktionieren, und wie Du Webhooks idempotent und zuverlässig gestaltest.

S

schutzgeist

6 min read
Idempotenz im API Design: Webhooks, Idempotency Keys und praktische Beispiele

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?

Idempotenz bedeutet, dass eine Operation mehrfach ausgeführt werden kann, ohne dass sich das Ergebnis ändert. Das ist wichtig für zuverlässige APIs und sichere Wiederholungen.

2. Welche HTTP-Methoden sind idempotent?

GET, PUT und DELETE sind idempotent. POST ist in der Regel nicht idempotent, weil jeder Aufruf eine neue Ressource erstellen kann.

3. Was ist ein Idempotency Key?

Ein Idempotency Key ist ein eindeutiger Wert, den der Client mitgibt. Der Server speichert ihn zusammen mit dem Ergebnis und liefert bei Wiederholung dasselbe Ergebnis zurück, ohne die Operation erneut auszuführen.

4. Warum ist Idempotenz bei Zahlungen wichtig?

Bei Zahlungen können Netzwerkfehler zu Wiederholungen führen. Ohne Idempotenz könnte dieselbe Zahlung mehrfach ausgeführt werden. Idempotenz Keys verhindern Doppelbuchungen.

5. Was ist ein Webhook?

Ein Webhook ist eine vom Server ausgelöste HTTP-Anfrage an den Client, um ein Ereignis zu melden. Webhooks werden beispielsweise für Zahlungsbestätigungen, Statusänderungen oder Benachrichtigungen verwendet.

6. Warum sollten Webhooks idempotent sein?

Webhooks können aufgrund von Timeouts oder Wiederholungen mehrfach eintreffen. Idempotente Verarbeitung verhindert, dass Ereignisse doppelt verarbeitet werden.

7. Wie erkennt man doppelte Webhooks?

Doppelte Webhooks werden durch eindeutige Event-IDs erkannt. Der Empfänger speichert die IDs und verarbeitet Ereignisse mit derselben ID nur einmal.

8. Was passiert bei gleichzeitigen Anfragen mit demselben Idempotency Key?

Der Server muss sicherstellen, dass nur eine Operation ausgeführt wird. Locking oder atomare Datenbankoperationen verhindern Race Conditions bei gleichzeitigen Anfragen.

9. Wie lange sollte ein Idempotency Key gespeichert werden?

Die Speicherdauer hängt vom Anwendungsfall ab. Typische Zeiten reichen von Minuten bis zu Tagen. Wichtig ist, dass der Client die Gültigkeit des Keys kennt und ihn nicht zu spät wiederverwendet.

10. Kann PATCH idempotent sein?

PATCH ist nur idempotent, wenn die Operation das Ergebnis nicht verändert, wenn sie mehrfach ausgeführt wird. Das hängt von der konkreten Implementierung des Patch-Dokuments ab.

11. Was passiert bei einem ungültigen Idempotency Key?

Bei einem ungültigen oder abgelaufenen Key antwortet die API mit einem Fehler. Der Client kann dann entscheiden, ob er die Operation mit einem neuen Key wiederholt.

12. Sollte man Idempotency Keys für alle POST Anfragen verwenden?

Idempotency Keys sind besonders wichtig für POST Anfragen, die Geschäftstransaktionen auslösen, wie Zahlungen, Bestellungen oder Buchungen. Für reine Lese- oder unverbindliche Anfragen sind sie oft nicht nötig.

13. Was ist der Unterschied zwischen Idempotenz und Safe Methods?

Safe Methods verändern den Serverzustand nicht, wie GET und HEAD. Idempotente Methoden können den Zustand verändern, liefern aber bei Wiederholung dasselbe Ergebnis, wie PUT und DELETE.

14. Wie testet man Idempotenz?

Idempotenz testest Du, indem Du dieselbe Anfrage mehrfach sendest und das Ergebnis vergleichst. Für POST Anfragen prüfst Du, dass Doppelsendungen mit demselben Idempotency Key nicht zu neuen Ressourcen führen.

15. Was hat Idempotenz mit Retry-Strategien zu tun?

Retry-Strategien sollten nur idempotente Operationen automatisch wiederholen. Nicht idempotente Operationen wie POST ohne Idempotency Key dürfen nicht automatisch wiederholt werden, da sonst Doppelbuchungen entstehen können.

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

  1. https://www.rfc-editor.org/rfc/rfc9110
  2. https://stripe.com/docs/api/idempotent_requests
  3. 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

REST und HTTP: Entwicklung und Integration nach REST-Prinzipien von Stefan Tilkov

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

API-Design: Praxishandbuch für Java- und Webservice-Entwickler

API-Design: Praxishandbuch für Java- und Webservice-Entwickler

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

Microservices: Grundlagen flexibler Softwarearchitekturen von Eberhard Wolff

Microservices: Grundlagen flexibler Softwarearchitekturen von Eberhard Wolff

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

Zurück zum DEV Blog
Share:

Ähnliche Beiträge