Por qué
Si tu request falla con timeout o 5xx, no sabes si Rail lo recibió o no. Si reintentas, ¿corres el riesgo de crear el recurso 2 veces? ConIdempotency-Key no.
Uso
Envía el headerIdempotency-Key con un UUID que generaste tú:
- En el primer request: procesa normal y guarda el response asociado a tu key.
- En requests subsecuentes con la misma key: devuelve el response cacheado, sin re-procesar.
TTL
24 horas. Después de eso, la key se libera y un nuevo request con esa key se procesa como nuevo.Reglas
- Solo aplica a POST y DELETE. GETs son idempotentes por naturaleza.
- La key debe ser única por intención lógica de tu cliente — genérala con
uuid.v4()o equivalente. - Si reúsas la misma key con un body diferente, devuelve
409 Conflictconerror.code: idempotency_conflict.