Rendre les opérations API IA idempotentes
Rendre les opérations API IA idempotentes : guide de production avec décision explicite, artefact réutilisable, tests d’échec, signaux d’exploitation et limites sourcées.

Rendre les opérations API IA idempotentes : guide de production avec décision explicite, artefact réutilisable, tests d’échec, signaux d’exploitation et limites sourcées.
Réponse directe
Implémentez Rendre les opérations API IA idempotentes comme un contrat de contrôle de fiabilité, pas comme une configuration ponctuelle. Figez protocole, owner, preuves et rollback avant le trafic. Points de contrôle : logical_request_id, idempotency_key, request_digest, durable_result.
La conclusion est fixée par la table de contrat et l’exemple déterministe. ai-api-idempotency ne passe pas en rollout si un contrôle dur manque de preuve réseau, de relecture durable ou d’owner.
Périmètre et responsabilités
Séparez la tâche client du plan de contrôle. Le client possède son fichier ou sa variable ; la passerelle possède authentification, routage, limites, comptabilité et tentatives ; le fournisseur possède son protocole natif et ses capacités volatiles. Une réponse texte ne prouve qu’un seul chemin.
L’article possède la décision, les risques et la preuve ; la documentation vivante garde les commandes et étapes d’interface volatiles. On obtient ainsi un arbre de capacités sans doubler l’owner d’une intention.
Le registre owner de cette page est ai-api-idempotency ; ses contrôles figés sont logical_request_id, idempotency_key, request_digest, durable_result. Chaque valeur est vérifiée à la limite réseau ou durable, jamais déduite d’un libellé commercial.
Artefact pratique: Rendre les opérations API IA idempotentes
Ce registre de revue est l’artefact livrable. Les valeurs techniques explicites permettent de comparer configuration, preuve réseau et état durable sans capture d’écran.
| Contrôle | Décision fixée | Preuve |
|---|---|---|
key_scope |
principal_plus_operation_plus_idempotency_key |
principal_id + operation + key |
request_binding |
canonical_digest_must_match |
request_digest + schema_version |
reservation |
atomic_pending_record_before_side_effect |
unique_constraint + created_at + owner |
replay |
same_key_same_digest_returns_durable_result |
original_result_id + replay_count |
conflict |
same_key_different_digest_rejected |
conflict_status + both_digests_without_payload |
recovery |
stale_pending_requires_owned_reconciliation |
lease + side_effect_receipt + terminal_write |
Exemple déterministe
L’exemple utilise des placeholders et des entrées déterministes. Remplacez seulement les identifiants validés, jamais les secrets ou données client, et gardez le snapshot exact.
BEGIN;
INSERT INTO operation_ledger
(principal_id, operation, idempotency_key, request_digest, status)
VALUES
(:principal, :operation, :key, :digest, 'pending')
ON CONFLICT DO NOTHING;
-- only the transaction that owns the new row may perform the side effect
-- persist terminal result before returning it to the caller
COMMIT;
Niveaux de vérification
Exécutez les contrôles dans l’ordre. Un succès tardif ne compense pas une limite absente ; chaque tentative doit rejoindre une requête logique.
- Figer client, politique de passerelle, alias de modèle, routes et référence observable. Preuve pour
key_scope: appliquerprincipal_plus_operation_plus_idempotency_keyet conserverprincipal_id + operation + key. - Exécuter une sonde positive déterministe et conserver réponse, request ID, route, état terminal et usage. Preuve pour
request_binding: appliquercanonical_digest_must_matchet conserverrequest_digest + schema_version. - Exécuter le cas négatif, limite ou déconnexion associé et vérifier la couche d’échec. Preuve pour
reservation: appliqueratomic_pending_record_before_side_effectet conserverunique_constraint + created_at + owner. - Répéter sur le vrai protocole ; ne pas déduire le support natif d’un endpoint voisin. Preuve pour
replay: appliquersame_key_same_digest_returns_durable_resultet conserveroriginal_result_id + replay_count. - Déployer sur une cohorte bornée avec owner, expiration, seuil d’arrêt et rollback. Preuve pour
conflict: appliquersame_key_different_digest_rejectedet conserverconflict_status + both_digests_without_payload. - Relire configuration et comptabilité durables ; supprimer accès et données temporaires. Preuve pour
recovery: appliquerstale_pending_requires_owned_reconciliationet conserverlease + side_effect_receipt + terminal_write.
Défaillances à éviter
Chaque point suivant bloque la publication. HTTP 200, tableau de bord ou démonstration ne remplacent pas ces contrôles.
memory_only_deduplication— Simemory_only_deduplicationapparaît, arrêtez le rollout et appliquez owner, preuves et rollback ; une sonde réussie ne l’annule pas.key_without_digest— Sikey_without_digestapparaît, arrêtez le rollout et appliquez owner, preuves et rollback ; une sonde réussie ne l’annule pas.check_then_act_race— Sicheck_then_act_raceapparaît, arrêtez le rollout et appliquez owner, preuves et rollback ; une sonde réussie ne l’annule pas.model_call_id_as_key— Simodel_call_id_as_keyapparaît, arrêtez le rollout et appliquez owner, preuves et rollback ; une sonde réussie ne l’annule pas.
Signaux et conditions d’arrêt
Observez ensemble succès et dommage. Le seuil vient de la politique du workload ; fixez SLO et dénominateur avant la fenêtre.
| Signal | Seuil | Action |
|---|---|---|
duplicate_side_effect_count |
0 |
stop_operation_and_reconcile |
idempotency_digest_conflicts |
review_each_event |
reject_and_alert_owner |
stale_pending_age |
<_owned_recovery_deadline |
reconcile_with_external_receipt |
replay_result_mismatch |
0 |
disable_endpoint |
Limites de Modelflare
Modelflare centralise routage compatible et natif, clés limitées, groupes, usage et échecs. Un canal ne prouve pas tous les champs, alias, engagements de conservation, régions ou fallbacks. Vérifiez en natif et prenez le règlement durable comme vérité financière.
C’est une méthode d’implémentation, pas une certification, conclusion juridique, historique d’uptime ou benchmark universel. Revérifiez contrat, modèles, prix, conservation et régions à T-1 ; déplacez la date si un fait central change.
Poursuivre dans le cluster
Le parent traite la décision large, le sibling l’étape suivante et la documentation la configuration actuelle. Les liens de corps sont nécessaires car le CMS géré n’a pas de related-slug.
Questions fréquentes
Rendre les opérations API IA idempotentes : Une requête réussie suffit-elle ?
Non. Cas négatif, rollout borné, relecture durable et arrêt sont des gates distincts.
Rendre les opérations API IA idempotentes : Faut-il figer modèles et prix des mois avant ?
Non. Utilisez placeholders ou snapshots et revérifiez à T-1.
Rendre les opérations API IA idempotentes : Quelles preuves conserver ?
IDs sans données sensibles, version, temps, état, usage, charge finale et décision.
Sources et date de vérification
Sources vérifiées le 2026-08-07. Elles définissent contrats et principes, pas les routes non testées ni l’état futur.