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ó.
- Una clave nueva para cada cosa que quieres hacer, y la MISMA en cada reintento de esa cosa.
- Repite con 429 y 503, esperando lo que dice Retry-After, y cuando la conexión se corta.
- Un 409 in_progress es que la primera sigue en curso: repite en unos segundos con la misma clave.
- Un 409 idempotency_conflict es que esa clave ya se usó con otra petición: es un fallo tuyo, no se repite.
- No repitas 400, 401, 403, 404 ni 422: la respuesta no va a cambiar.
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