Explica cómo diseñar operaciones reintentables con claves de idempotencia, persistencia del resultado, scope, expiración y coordinación con transacciones.
Última actualización
Actualizada
Nivel
Profundización
Idempotencia permite repetir una misma intención sin duplicar su efecto de negocio. Es una propiedad del contrato completo, no únicamente del método HTTP.
Las redes fallan de forma ambigua: el cliente puede enviar una creación, el servidor confirmarla y la respuesta perderse. El cliente no sabe si debe repetir.
GET, PUT y DELETE se consideran idempotentes por intención. POST no lo es automáticamente, aunque puede diseñarse como idempotente mediante una key.
Idempotente no significa que todas las respuestas sean iguales. Un DELETE puede devolver 204 y después 404, mientras el estado final sigue siendo “recurso ausente”.
recibir key
↓
calcular fingerprint
↓
insertar registro único
↓
ejecutar operación y persistir resultado
↓
guardar response
↓
repeticiones devuelven el mismo resultado
Idealmente, la reserva de key y el cambio de negocio se coordinan en la misma transacción. Si el efecto ocurre en un proveedor externo, necesitas una máquina de estados y reconciliación.
No mantengas una transacción PostgreSQL abierta durante una llamada de red larga sin evaluar locks y pool.
Las keys no se conservan eternamente. El TTL debe superar la ventana realista de retries. Tras expirar, repetir podría crear un nuevo efecto; el contrato debe comunicarlo.
Prueba la misma key de forma secuencial y concurrente; payload distinto; caída entre etapas; expiración; aislamiento por tenant; efectos secundarios únicos.