Header Idempotency-Key
L’API di Bird supporta la deduplicazione facoltativa delle richieste tramite l’header Idempotency-Key. Questa pagina definisce il contratto HTTP; per la strategia dei tentativi successivi, consulta Idempotenza.
Header della richiesta
| Header | Vincoli |
|---|---|
| Idempotency-Key | Facoltativo. Qualsiasi stringa non vuota fino a 255 caratteri; si consiglia un UUID v4. Applicato alle operazioni POST, PATCH, PUT e DELETE supportate; ignorato per GET, HEAD e OPTIONS. |
Le mutazioni con ambito di spazio di lavoro o organizzazione supportano la riproduzione delle risposte descritta di seguito. Le operazioni limitate all’utente, le operazioni non autenticate prive di ambito e i flussi non la utilizzano. Le operazioni con un contratto di riproduzione separato definiscono il proprio comportamento nella rispettiva pagina di riferimento.
Se ometti l’header o invii un valore vuoto, la richiesta viene elaborata normalmente senza deduplicazione. Negli endpoint che dichiarano questo header, una chiave più lunga di 255 caratteri restituisce 422 con il codice E01001 ValidationError.
Le chiavi hanno come ambito il tuo spazio di lavoro, o la tua organizzazione per gli endpoint a livello di organizzazione, e vengono conservate per circa 3 ore. Dopo questo intervallo, una richiesta che riutilizza la chiave viene elaborata come una nuova richiesta.
Semantica della risposta
| Scenario | Risposta |
|---|---|
| Prima richiesta con una chiave | Elaborata normalmente; una risposta completata può essere conservata per la riproduzione; le risposte 5xx non vengono conservate. |
| Stessa chiave, richiesta identica | Status e body originali riprodotti, con l'header di risposta Idempotency-Replay: true. |
| Stessa chiave, richiesta diversa | 409 con E01005 IdempotencyKeyReuse. Genera una nuova chiave per la nuova richiesta. |
| Stessa chiave, richiesta originale ancora in corso | 409 con E01004 RequestInProgress. Il lock scade entro ~30 secondi; attendi e riprova. |
| La richiesta originale ha restituito 5xx | Non memorizzata in cache: la chiave viene sbloccata e il retry viene elaborato da zero. |
| Protezione di idempotenza non disponibile prima dell'esecuzione | 503 con E01033 IdempotencyUnavailable. Questo tentativo non viene eseguito; riprova con la stessa chiave e richiesta. |
Una risposta riprodotta è byte per byte identica all'originale (stesso status code, stesso body), distinguibile solo dall'header aggiuntivo:
Esempio di codice
HTTP/1.1 202 Accepted
Idempotency-Replay: true"Identical request" comprende il metodo, l’endpoint, i parametri del percorso e della query e il corpo originale della richiesta. Una differenza in questi valori, inclusi gli spazi in JSON, provoca E01005. I caricamenti multipart confrontano i nomi delle parti, i nomi dei file e i contenuti; i delimitatori e l’ordine delle parti non influiscono sulla riproduzione. Entrambi gli errori 409 vengono restituiti nella risposta di errore standard.
Le risposte conservate possono includere rifiuti 4xx. Usa una nuova chiave quando correggi una richiesta: se il rifiuto è stato conservato, un tentativo senza modifiche lo riproduce, mentre una richiesta modificata restituisce 409 E01005 IdempotencyKeyReuse.
Le risposte 5xx non vengono mai memorizzate in cache. Riprova con backoff usando la stessa chiave e richiesta. E01033 IdempotencyUnavailable indica che questo tentativo non è stato eseguito; non descrive l'esito di un tentativo precedente. Mantieni la chiave a ogni retry.
Un'operazione può avere effetto prima che la sua risposta venga conservata. Se quella risposta viene persa, o il lock in-flight scade, un retry può eseguire di nuovo l'operazione. Un timeout o un'altra risposta 5xx non dimostrano quindi che l'operazione non abbia avuto effetto.
Comportamento degli SDK
Gli SDK ufficiali allegano un UUID Idempotency-Key generato automaticamente a ogni richiesta mutante, creato una volta per chiamata logica e riutilizzato in tutti i tentativi di retry di quella chiamata. Puoi fornire la tua chiave per ogni chiamata (idempotencyKey in TypeScript, option.WithIdempotencyKey in Go, idempotency_key in Python) quando un'operazione logica coinvolge più chiamate SDK. Per rilevare un replay, leggi l'header di risposta Idempotency-Replay tramite l'accessor dei metadati di trasporto di ogni SDK: .withResponse() in TypeScript, option.WithResponseInto in Go e with_raw_response in Python.
Correlati
- Concetti di idempotenza: strategia di retry, progettazione delle chiavi e limiti di replay
- Risposte di errore: la risposta di errore che racchiude E01004 e E01005
- Messaggi email: l'endpoint di invio, il caso d'uso più comune per una chiave
- Concetti degli SDK: generazione automatica delle chiavi e retry
Risorse correlate
Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.
Comprendi il concettoShould I use a Bird SDK or call the API directly?Segui il percorso di apprendimentoBuild your first integrationGuida all'implementazioneSend your first email
Ottieni un brief di implementazione