API FlavosoFondamentauxIdempotence
Idempotence
Avec une Idempotency-Key, un POST répété n'est pas exécuté deux fois. C'est ainsi que vous réessayez sans risque après une erreur réseau.
Pourquoi
Si votre application ne reçoit pas de réponse à un POST, elle ne sait pas s'il est arrivé : la commande a-t-elle été acceptée, la réservation créée ? Sans protection, une nouvelle tentative crée une seconde réservation. Avec une Idempotency-Key, Flavoso répond à la nouvelle tentative avec le résultat de la première.
Fonctionnement
- Pour un
POST, envoyez l'en-têteIdempotency-Keyavec une chaîne unique : 1 à 255 caractères ASCII imprimables. PourPUT,PATCHetDELETE, Flavoso ignore l'en-tête. - La clé s'applique par connexion. Flavoso conserve la première réponse (statut et corps) pendant 24 heures.
- Si la même requête arrive à nouveau avec la même clé, la première réponse est renvoyée, avec
Idempotent-Replayed: true, et rien ne se produit une seconde fois. - La comparaison porte sur la méthode, le chemin et les octets bruts du corps. Une nouvelle tentative doit donc envoyer exactement le même corps : des espaces différents ou un autre ordre des champs suffisent à en faire une autre requête, et la même clé avec une autre requête renvoie 422
idempotency_key_reused. - Si la première requête est encore en cours, la seconde reçoit 409
idempotency_in_progress. Patientez un instant, puis réessayez. Si la première n'a jamais abouti (interrompue de notre côté), la clé est libérée au bout de 2 minutes. - Une réponse 5xx ou 409
conflictn'est pas conservée : la nouvelle tentative est exécutée.
# Create the key ONCE per operation and keep it for every retry of that operation
KEY=$(uuidgen)
curl -X POST https://api.flavoso.com/v1/orders/ORDER_ID/accept \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: $KEY"
# No answer? Send exactly the same command again, with the same $KEY.HTTP/1.1 200 OK
Idempotent-Replayed: true
X-Request-Id: req_9a1b2c3d4e5f60718293a4b5
Content-Type: application/json
{ "object": "order", "id": "cce01f52-5188-410f-9659-6ce26ba9b784", "status": "confirmed", ... }Choisir de bonnes clés
La clé est liée à l'opération, pas à la tentative. Créez-la une seule fois, quand votre programme décide d'agir, et réutilisez-la pour chaque nouvelle tentative de cette même opération.
- Dérivée de vos propres données :
accept-<id de commande>,ack-<id de commande>,booking-<votre numéro de réservation>. - Ou un UUID, enregistré avec la tâche dans votre file d'attente.
- Jamais une nouvelle clé à chaque tentative : elle ne protégerait alors de rien.
Ce qui est répétable par nature
- Les changements de statut : une commande déjà au statut cible est renvoyée inchangée avec 200, et
acceptrenvoie inchangée une commande qui a déjà dépassépending. POST /orders/{id}/acknowledge: une commande prise en charge le reste ; renvoyer le mêmeexternal_idne change rien.PUT /menu,PUT /store/hours,POST /menu/availabilityet chaquePATCH: ils fixent un état cible au lieu de basculer. Les envoyer deux fois donne le même résultat qu'une seule.
Pour un POST, une Idempotency-Key ne nuit jamais et garantit en plus une réponse identique ; pour PUT et PATCH, Flavoso l'ignore.
Une question reste ouverte ? Écrivez à support@flavoso.com en indiquant l'identifiant de X-Request-Id. Il nous permet de retrouver votre requête dans le journal.