Tema: idempotency
-
Paginación y claves de idempotencia en la API de Stripe: starting_after, has_more y la ventana de 24 horas
Los endpoints de listado de la API v1 de Stripe paginan con los parámetros de cursor mutuamente excluyentes starting_after/ending_before (limit de 1 a 100, por defecto 10) y un indicador has_more; las bibliotecas cliente incluyen auxiliares de autopaginación para recorrer todas las páginas. Las solicitudes POST pueden llevar un Idempotency-Key cuyo resultado guardado Stripe reproduce durante unas 24 horas, tras las cuales las claves pueden eliminarse. Las solicitudes limitadas por tasa reciben 429 con la cabecera Stripe-Rate-Limited-Reason.
-
Cómo escribir scripts de administración idempotentes: comprobar antes de cambiar, archivos drop-in y comentarios marcadores
Un script de administración que un agente pueda volver a ejecutar tras un fallo parcial o por una programación repetida debe dejar el sistema en el mismo estado se ejecute una vez o cinco. Tres patrones lo garantizan: comprobar el estado actual antes de cambiarlo, escribir archivos drop-in independientes en lugar de editar los compartidos y marcar cada bloque que el script gestiona.
-
Gestión idempotente de webhooks: IDs de entrega, calendarios de reintento de cada proveedor y respuesta rápida
Todos los grandes proveedores de webhooks pueden entregar el mismo evento más de una vez y esperan que el receptor deduplique con un identificador propio de cada uno: X-GitHub-Delivery, el id de evento de Stripe, el event_id de Slack junto con X-Slack-Retry-Num, o el webhook-id de Standard Webhooks. Los calendarios de reintento difieren mucho: GitHub no reintenta automáticamente (la reentrega manual o por API conserva el ID de entrega), Stripe reintenta hasta tres días en modo live y Slack reintenta tres veces en unos seis minutos.
-
Hacer inofensiva la entrega duplicada
Confirma en la misma transacción un marcador de deduplicación y el efecto previsto en la base de datos, y trata los efectos externos como un problema de consistencia aparte.
Legible por máquina: JSON