Sign inGet Started

Encabezado Idempotency-Key

La API de Bird admite la deduplicación opcional de solicitudes mediante la cabecera Idempotency-Key. Esta página define el contrato HTTP; para la estrategia de reintentos, consulta Idempotencia.

Encabezado de solicitud

EncabezadoRestricciones
Idempotency-KeyOpcional. Cualquier cadena no vacía de hasta 255 caracteres; se recomienda un UUID v4. Se aplica a las operaciones POST, PATCH, PUT y DELETE compatibles; se ignora en GET, HEAD y OPTIONS.
Las mutaciones con ámbito de espacio de trabajo u organización admiten la reproducción de respuestas descrita a continuación. Las operaciones limitadas al usuario, las operaciones no autenticadas sin ámbito y los flujos no la utilizan. Las operaciones con un contrato de reproducción propio definen su comportamiento en su página de referencia.
Si omites la cabecera o envías un valor vacío, la solicitud se procesa con normalidad y sin deduplicación. En los endpoints que declaran esta cabecera, una clave de más de 255 caracteres devuelve 422 con el código E01001 ValidationError.
Las claves tienen ámbito de espacio de trabajo, o de organización en los endpoints de nivel de organización, y se conservan durante unas 3 horas. Tras ese plazo, una solicitud que reutiliza la clave se procesa como una solicitud nueva.

Semántica de la respuesta

EscenarioRespuesta
Primera solicitud con una claveSe procesa con normalidad; una respuesta completada puede conservarse para reproducirla; las respuestas 5xx no se conservan.
Misma clave, solicitud idénticaSe repiten el estado y el cuerpo originales, con el encabezado de respuesta Idempotency-Replay: true.
Misma clave, solicitud diferente409 con E01005 IdempotencyKeyReuse. Genera una clave nueva para la nueva solicitud.
Misma clave, solicitud original aún en curso409 con E01004 RequestInProgress. El bloqueo expira en ~30 segundos; espera y reintenta.
La solicitud original devolvió 5xxNo se almacena en caché: la clave se desbloquea y el reintento se procesa como nuevo.
Protección de idempotencia no disponible antes de la ejecución503 con E01033 IdempotencyUnavailable. Este intento no se ejecuta; reintenta con la misma clave y solicitud.
Una respuesta repetida es idéntica byte a byte a la original (mismo código de estado, mismo cuerpo), distinguida solo por el encabezado adicional:
Ejemplo de código
HTTP/1.1 202 Accepted
Idempotency-Replay: true
"Identical request" abarca el método, el endpoint, los parámetros de ruta y de consulta, y el cuerpo original de la solicitud. Una diferencia en estos valores, incluidos los espacios en blanco de JSON, provoca E01005. Las cargas multipart comparan los nombres de las partes, los nombres de archivo y el contenido; los límites y el orden de las partes no afectan a la reproducción. Ambos errores 409 se devuelven en la respuesta de error estándar.
Las respuestas conservadas pueden incluir rechazos 4xx. Usa una clave nueva al corregir una solicitud: si se conservó el rechazo, un reintento sin cambios lo reproduce y una solicitud modificada devuelve 409 E01005 IdempotencyKeyReuse.
Las respuestas 5xx nunca se almacenan en caché. Reintenta con retroceso usando la misma clave y solicitud. E01033 IdempotencyUnavailable significa que este intento no se ejecutó; no describe el resultado de un intento anterior. Conserva la clave en cada reintento.
Una operación puede surtir efecto antes de que su respuesta se retenga. Si esa respuesta se pierde o el bloqueo en curso expira, un reintento puede ejecutar la operación de nuevo. Un tiempo de espera agotado u otra respuesta 5xx no demuestra que la operación no haya tenido efecto.

Comportamiento de SDK

Los SDK oficiales adjuntan un UUID Idempotency-Key autogenerado a cada solicitud de mutación, generado una vez por llamada lógica y reutilizado en todos los reintentos de esa llamada. Puedes proporcionar tu propia clave por llamada (idempotencyKey en TypeScript, option.WithIdempotencyKey en Go, idempotency_key en Python) cuando una operación lógica abarca varias llamadas SDK. Para detectar una repetición, lee el encabezado de respuesta Idempotency-Replay mediante el accesor de metadatos de transporte de cada SDK: .withResponse() en TypeScript, option.WithResponseInto en Go y with_raw_response en Python.

Relacionado