Sign inGet Started

Idempotency-Key-Header

Die Bird API unterstützt eine optionale Deduplizierung von Anfragen über den Header Idempotency-Key. Diese Seite beschreibt das Verhalten auf HTTP-Ebene. Hinweise zu Wiederholungsversuchen finden Sie unter Idempotenz.

Request-Header

HeaderEinschränkungen
Idempotency-KeyOptional. Eine beliebige, nicht leere Zeichenfolge mit bis zu 255 Zeichen; empfohlen wird eine UUID v4. Wird bei unterstützten POST-, PATCH-, PUT- und DELETE-Operationen berücksichtigt; bei GET, HEAD und OPTIONS ignoriert.
Mutationen im Geltungsbereich eines Workspace oder einer Organisation unterstützen die unten beschriebene Wiedergabe gespeicherter Antworten. Operationen, die ausschließlich einem Benutzer zugeordnet sind, nicht authentifizierte Operationen ohne Geltungsbereich und Streams nutzen sie nicht. Operationen mit einem eigenen Wiedergabevertrag beschreiben ihr Verhalten auf ihrer Referenzseite.
Wenn Sie den Header weglassen oder einen leeren Wert senden, wird die Anfrage normal und ohne Deduplizierung verarbeitet. Bei Endpunkten, die diesen Header deklarieren, führt ein Schlüssel mit mehr als 255 Zeichen zu 422 mit dem Code E01001 ValidationError.
Schlüssel gelten für Ihren Workspace oder bei Endpunkten auf Organisationsebene für Ihre Organisation und werden ungefähr 3 Stunden gespeichert. Nach Ablauf dieses Zeitraums wird eine Anfrage mit einem erneut verwendeten Schlüssel als neue Anfrage verarbeitet.

Response-Semantik

SzenarioResponse
Erste Anfrage mit einem KeyWird normal verarbeitet; eine abgeschlossene Antwort kann zur Wiedergabe gespeichert werden; 5xx-Antworten werden nicht gespeichert.
Gleicher Key, identische AnfrageUrsprünglicher Status und Body werden mit dem Idempotency-Replay: true-Response-Header wiedergegeben.
Gleicher Key, andere Anfrage409 mit E01005 IdempotencyKeyReuse. Generieren Sie einen neuen Key für die neue Anfrage.
Gleicher Key, ursprüngliche Anfrage noch in Bearbeitung409 mit E01004 RequestInProgress. Die Sperre läuft innerhalb von ca. 30 Sekunden ab; warten und erneut versuchen.
Ursprüngliche Anfrage lieferte 5xx zurückWird nicht zwischengespeichert: Der Key wird entsperrt und der Retry wird neu verarbeitet.
Idempotenzschutz vor Ausführung nicht verfügbar503 mit E01033 IdempotencyUnavailable. Dieser Versuch wird nicht ausgeführt; mit demselben Key und derselben Anfrage erneut versuchen.
Eine wiedergegebene Response ist Byte für Byte das Original (gleicher Statuscode, gleicher Body), unterschieden nur durch den zusätzlichen Header:
Codebeispiel
HTTP/1.1 202 Accepted
Idempotency-Replay: true
"Identical request" umfasst Methode, Endpunkt, Pfad- und Abfrageparameter sowie den unveränderten Anfrageinhalt. Unterschiede in diesen Werten, einschließlich Leerraum in JSON, lösen E01005 aus. Bei Multipart-Uploads werden Teilnamen, Dateinamen und Inhalte verglichen; Grenzen und Reihenfolge der Teile beeinflussen die Wiedergabe nicht. Beide 409-Fehler werden im Standardformat der Fehlerantwort zurückgegeben.
Gespeicherte Antworten können 4xx-Ablehnungen enthalten. Verwenden Sie beim Korrigieren einer Anfrage einen neuen Schlüssel: Wurde die Ablehnung gespeichert, gibt ein unveränderter Wiederholungsversuch sie erneut zurück; eine geänderte Anfrage führt zu 409 E01005 IdempotencyKeyReuse.
5xx-Responses werden nie zwischengespeichert. Wiederholen Sie mit Backoff unter Verwendung des selben Keys und derselben Anfrage. E01033 IdempotencyUnavailable bedeutet, dass dieser Versuch nicht ausgeführt wurde; es beschreibt nicht das Ergebnis eines früheren Versuchs. Behalten Sie den Key bei jedem Retry bei.
Eine Operation kann wirksam werden, bevor ihre Response gespeichert wird. Geht diese Response verloren oder läuft die In-Flight-Sperre ab, kann ein Retry die Operation erneut ausführen. Ein Timeout oder eine weitere 5xx-Response beweist daher nicht, dass die Operation keine Wirkung hatte.

Verhalten der SDK

Die offiziellen SDKs hängen an jede mutierende Anfrage eine automatisch generierte UUID Idempotency-Key an, die einmal pro logischem Aufruf erzeugt und über alle Retry-Versuche dieses Aufrufs wiederverwendet wird. Sie können pro Aufruf einen eigenen Key angeben (idempotencyKey in TypeScript, option.WithIdempotencyKey in Go, idempotency_key in Python), wenn eine logische Operation mehrere SDK-Aufrufe umfasst. Um ein Replay zu erkennen, lesen Sie den Idempotency-Replay-Response-Header über den Transport-Metadata-Accessor jedes SDK: .withResponse() in TypeScript, option.WithResponseInto in Go und with_raw_response in Python.

Verwandte Themen