IOSOR Guías

Idempotencia en la API de envío: duplicados, reintentos y dinero

Guía para desarrolladores de APIs prepago: claves de idempotencia, reintentos seguros, prevención de duplicados y correlación legible para el ledger, para que un fallo de ingeniería no sea un incidente financiero.

Los timeouts ocurren. Los balanceadores reintentan. Los clientes móviles hacen doble toque. Sin idempotencia, un producto de «enviar una vez» se convierte en un doble cargo prepago y una experiencia de OTP duplicado. Esta guía es para líderes de ingeniería y producto técnico que integran una API de mensajería prepago white-label, donde cada duplicado es visible en la cartera.

Por qué los duplicados se vuelven problemas de dinero

Modo de fallo El usuario ve La cartera ve
Timeout de cliente + reintento ciego Dos OTP / dos alertas Dos débitos
Handler de webhook no idempotente Dobles efectos secundarios Confusión en el éxito
Reenvío de usuario sobre auto-reintento Usuarios molestos Unidades acumuladas
Falta de correlación Tickets de «falló» Filas de ledger sin par

Claves de idempotencia que sobreviven a los reintentos

Una ruta de envío seria acepta una clave generada por el cliente que es única por intención de negocio, no por intento TCP. Debe devolver el mismo resultado aceptado al reintentar dentro de una ventana de TTL clara. Esto evita crear silenciosamente un segundo débito para la misma intención. La clave debe registrarse junto al ID del mensaje y la referencia prepago. Debe funcionar a través de timeouts, reintentos de gateway y procesos de soporte.

Presupuestos de reintento vs reenvío del usuario

Los reintentos automáticos necesitan un presupuesto: máximo de intentos, backoff y qué clases de errores son reintentables. El reenvío iniciado por el usuario es una acción de producto diferente con sus propios límites y costes prepago. Mezclarlos es como convertir una red inestable en un incidente financiero de fin de semana. Combine ambos con una parada por saldo bajo y razones de rechazo claras para que producto y finanzas compartan una sola verdad.

Checklist de comprador / engineering

  1. Semántica de claves de idempotencia y TTL documentados.
  2. Prueba de replay que demuestre un débito por intención.
  3. Separación del presupuesto de auto-reintento de la lógica de reenvío del usuario.
  4. IDs de correlación en solicitudes, estados de mensajes y ledger prepago.
  5. Staging en corredores reales; los mocks no son lanzamientos.
  6. Higiene de claves y privilegios mínimos para credenciales de envío.
  7. Manejo de códigos 429 y 503 sin perder la clave de intención original.
  8. Alertas si sube el rechazo por clave duplicada.

Banderas rojas

  • «Simplemente reintente hasta obtener un 200» sin usar claves de idempotencia.
  • Handlers de webhooks que no son idempotentes y activan efectos secundarios dos veces.
  • Claves secretas completas o tokens de auth apareciendo en logs o tickets.
  • Errores que muestran payloads de marcas externas o trazas internas a usuarios finales.
  • No hay forma de demostrar a finanzas que se evitó un duplicado específico.
  • Uso de timestamps como única fuente de unicidad para las transacciones.

Empiece con IOSOR

En la consola de envío, dispare un OTP o alerta con una clave de idempotencia generada por el cliente. Fuerce un timeout de cliente y reenvíe la misma petición dentro del TTL de la clave. Abra el ledger prepaid: esa intención debe mostrar un débito y un mensaje visible. Dos filas significan que la clave no sobrevivió al retry — arregle TTL y handler antes de dejar el corredor en Live.

Conclusión IOSOR

Haga: trate cada envío como evento de ledger primero. La clave es única por intención de negocio, no por intento TCP. El auto-retry tiene presupuesto; el toque de reenvío del usuario es otra acción con su propio coste prepaid.

¿Fue útil esta guía?

Guías relacionadas