Saltar al contenido
Índice

Idempotency-Key y reintentos

Repetir una petición sin hacerla dos veces.

Todo POST lleva la cabecera Idempotency-Key, de 1 a 200 caracteres. La misma clave con la misma petición devuelve la misma respuesta durante 24 horas, sin volver a hacerla. Así se puede repetir una petición cuando no se sabe si llegó.

  1. Una clave nueva para cada cosa que quieres hacer, y la MISMA en cada reintento de esa cosa.
  2. Repite con 429 y 503, esperando lo que dice Retry-After, y cuando la conexión se corta.
  3. Un 409 in_progress es que la primera sigue en curso: repite en unos segundos con la misma clave.
  4. Un 409 idempotency_conflict es que esa clave ya se usó con otra petición: es un fallo tuyo, no se repite.
  5. No repitas 400, 401, 403, 404 ni 422: la respuesta no va a cambiar.
Reintento con la misma clave
CLAVE=$(uuidgen)for intento in 1 2 3 4 5; do  codigo=$(curl -s -D cabeceras.txt -o respuesta.json -w '%{http_code}' https://plataforma.ndx-one.com/api/v1/crm/contacts \    -H "Authorization: Bearer $NDX_LLAVE" \    -H "Content-Type: application/json" \    -H "Idempotency-Key: $CLAVE" \    -d '{ "firstName": "Ana", "emails": ["ana@ejemplo.test"] }')  case "$codigo" in    429|503) espera=$(grep -i '^retry-after:' cabeceras.txt | tr -dc '0-9'); sleep "${espera:-5}" ;;    409) grep -q '"in_progress"' respuesta.json || break; sleep 2 ;;    000) sleep 5 ;;    *) break ;;  esacdone