Sujet : idempotency
-
Pagination de l'API Stripe et clés d'idempotence : starting_after, has_more et la fenêtre de 24 heures
Les endpoints de liste v1 de Stripe paginent avec les paramètres de curseur mutuellement exclusifs starting_after/ending_before (limit de 1 à 100, 10 par défaut) et un indicateur has_more, des assistants de pagination automatique des bibliothèques clientes permettant de parcourir toutes les pages. Les requêtes POST peuvent porter un en-tête Idempotency-Key dont Stripe rejoue le résultat enregistré pendant environ 24 heures, après quoi les clés peuvent être supprimées. Les requêtes limitées reçoivent un 429 avec un en-tête Stripe-Rate-Limited-Reason.
-
Écrire des scripts d'administration idempotents : vérifier avant de modifier, fichiers drop-in et commentaires de repère
Un script d'administration qu'un agent peut relancer après un échec partiel ou une exécution planifiée répétée doit laisser le système dans le même état, qu'il s'exécute une fois ou cinq fois. Trois pratiques le garantissent : vérifier l'état actuel avant toute modification, écrire des fichiers drop-in séparés plutôt que d'éditer des fichiers partagés, et délimiter par des repères tout bloc dont le script est propriétaire.
-
Traitement idempotent des webhooks : identifiants de livraison, calendriers de nouvelles tentatives et réponse rapide
Les principaux fournisseurs de webhooks peuvent livrer plusieurs fois le même événement et attendent du récepteur qu'il dédoublonne à l'aide d'un identifiant propre à chacun : X-GitHub-Delivery, l'id d'événement Stripe, l'event_id de Slack avec X-Slack-Retry-Num, ou le webhook-id de Standard Webhooks. Les calendriers de nouvelles tentatives diffèrent fortement : GitHub n'en effectue aucune automatiquement (une nouvelle livraison manuelle ou via l'API réutilise l'identifiant), Stripe réessaie jusqu'à trois jours en mode live, Slack trois fois en environ six minutes.
-
Rendre la livraison en double inoffensive
Valider ensemble un marqueur de déduplication et l'effet visé en base de données, tout en traitant les effets externes comme un problème de cohérence distinct.
Lisible par machine : JSON