Sign inGet Started

Idempotency-Key-header

De Bird-API ondersteunt optionele deduplicatie van verzoeken via de header Idempotency-Key. Deze pagina beschrijft het HTTP-contract; zie Idempotentie voor de strategie bij opnieuw proberen.

Requestheader

HeaderBeperkingen
Idempotency-KeyOptioneel. Een niet-lege tekenreeks van maximaal 255 tekens; een UUID v4 wordt aanbevolen. Wordt toegepast op ondersteunde POST-, PATCH-, PUT- en DELETE-bewerkingen; genegeerd bij GET, HEAD en OPTIONS.
Mutaties binnen een werkruimte of organisatie ondersteunen het hieronder beschreven opnieuw teruggeven van opgeslagen antwoorden. Bewerkingen die uitsluitend aan een gebruiker zijn gekoppeld, niet-geauthenticeerde bewerkingen zonder bereik en streams gebruiken dit niet. Bewerkingen met een eigen contract voor het opnieuw teruggeven van antwoorden beschrijven hun gedrag op hun referentiepagina.
Als je de header weglaat of een lege waarde verstuurt, wordt het verzoek normaal verwerkt, zonder deduplicatie. Bij endpoints die deze header declareren, geeft een sleutel van meer dan 255 tekens 422 terug met code E01001 ValidationError.
Sleutels gelden binnen je werkruimte, of binnen je organisatie bij endpoints op organisatieniveau, en worden ongeveer 3 uur bewaard. Na die bewaartermijn wordt een verzoek dat de sleutel opnieuw gebruikt als een nieuw verzoek verwerkt.

Response-semantiek

ScenarioResponse
Eerste verzoek met een sleutelWordt normaal verwerkt; een voltooid antwoord kan worden bewaard om opnieuw terug te geven; 5xx-antwoorden worden niet bewaard.
Zelfde sleutel, identiek verzoekOorspronkelijke status en body herhaald, met de Idempotency-Replay: true-responseheader.
Zelfde sleutel, ander verzoek409 met E01005 IdempotencyKeyReuse. Genereer een nieuwe sleutel voor het nieuwe verzoek.
Zelfde sleutel, oorspronkelijk verzoek nog onderweg409 met E01004 RequestInProgress. De vergrendeling verloopt binnen ~30 seconden; wacht en probeer opnieuw.
Oorspronkelijk verzoek retourneerde 5xxNiet gecacht: de sleutel wordt ontgrendeld en de retry wordt opnieuw verwerkt.
Idempotentiebescherming niet beschikbaar vóór uitvoering503 met E01033 IdempotencyUnavailable. Deze poging is niet uitgevoerd; probeer opnieuw met dezelfde sleutel en hetzelfde verzoek.
Een herhaalde response is byte voor byte het origineel (dezelfde statuscode, dezelfde body), alleen te onderscheiden door de extra header:
Codevoorbeeld
HTTP/1.1 202 Accepted
Idempotency-Replay: true
"Identical request" omvat de methode, het endpoint, de pad- en queryparameters en de onbewerkte verzoekbody. Een verschil in deze waarden, inclusief witruimte in JSON, veroorzaakt E01005. Bij multipart-uploads worden onderdeelnamen, bestandsnamen en inhoud vergeleken; de scheidingstekens en volgorde van onderdelen hebben geen invloed op het opnieuw teruggeven van het antwoord. Beide 409-fouten worden verpakt in het standaard foutantwoord.
Bewaarde antwoorden kunnen 4xx-afwijzingen bevatten. Gebruik een nieuwe sleutel als je een verzoek corrigeert: als de afwijzing is bewaard, geeft een ongewijzigde herhaling die opnieuw terug en geeft een gewijzigd verzoek 409 E01005 IdempotencyKeyReuse terug.
5xx-responses worden nooit gecacht. Probeer opnieuw met backoff met dezelfde sleutel en hetzelfde verzoek. E01033 IdempotencyUnavailable betekent dat deze poging niet is uitgevoerd; het beschrijft niet de uitkomst van een eerdere poging. Behoud de sleutel bij elke nieuwe poging.
Een operatie kan effect hebben voordat de response is opgeslagen. Als die response verloren gaat, of de in-flight-vergrendeling verloopt, kan een retry de operatie opnieuw uitvoeren. Een timeout of een andere 5xx-response bewijst daarom niet dat de operatie geen effect had.

Gedrag van SDK

De officiële SDK's voegen een automatisch gegenereerde UUID Idempotency-Key toe aan elk muterend verzoek, eenmalig gegenereerd per logische aanroep en hergebruikt bij alle retrypogingen van die aanroep. Je kunt per aanroep een eigen sleutel meegeven (idempotencyKey in TypeScript, option.WithIdempotencyKey in Go, idempotency_key in Python) wanneer één logische operatie meerdere SDK-aanroepen omvat. Om een replay te detecteren lees je de Idempotency-Replay-responseheader via de transport-metadata-accessor van elke SDK: .withResponse() in TypeScript, option.WithResponseInto in Go en with_raw_response in Python.

Gerelateerd

Gerelateerde bronnen

Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.

Ontvang een implementatieoverzicht