HTTP et idempotence : quand peut-on réessayer une requête ?
Une réponse perdue ne signifie pas que l’opération a échoué. Méthodes HTTP, clés d’idempotence et suivi du résultat aident à réessayer sans créer de doublon.
Article
Un agent doit pouvoir identifier le contrat utilisé et comprendre son évolution. Versions, dépréciation, liens et erreurs explicites facilitent la migration.
Vous changez le format d'un identifiant dans votre API. Le champ garde le même nom, mais un client continue de l'interpréter selon l'ancien format. Les agents peuvent rencontrer ce problème comme les applications classiques. Une évolution fiable demande un contrat clair, une période de transition et des réponses qui aident le client à s'adapter.
Supprimer un champ ou changer son type est une rupture visible. Modifier son sens peut l'être tout autant. Un montant exprimé dans une autre unité reste un nombre, mais le client peut prendre une mauvaise décision.
Le guide AIP-180 de Google distingue notamment la compatibilité du code, celle des échanges et celle du comportement. Les clients peuvent aussi dépendre d'usages qui n'ont jamais été explicitement promis.
Un agent s'appuie sur les exemples, la documentation et les réponses qu'il a déjà lus. Ces informations peuvent être anciennes. Il faut lui permettre de vérifier le contrat applicable à l'exécution.
Une version peut figurer dans l'URL, dans un en-tête ou dans un type de média. Ces choix ne déterminent pas à eux seuls la taille des changements ni la qualité de la migration.
Une version datée peut aider à identifier précisément un ensemble de comportements. Stripe a documenté cette approche, puis l'a fait évoluer avec des trains de versions nommés. Le point utile est l'engagement sur les changements compatibles et sur la durée de prise en charge.
Dans tous les cas, le client doit savoir quelle version il demande et laquelle le serveur applique. Une version par défaut silencieusement modifiée peut rendre les résultats difficiles à expliquer.
L'en-tête Deprecation, défini par la RFC 9745, indique qu'une ressource est ou sera dépréciée. Il ne signifie pas qu'elle a cessé de fonctionner.
L'en-tête Sunset, défini par la RFC 8594, peut annoncer la date à laquelle la ressource devrait devenir indisponible. Un lien peut accompagner ces informations et conduire à une politique de retrait ou à un guide de migration.
Les formats de date diffèrent : Deprecation utilise une date de champ structuré, tandis que Sunset utilise une date HTTP. Le client doit les interpréter selon leurs spécifications.
Ces signaux restent des informations que le client peut ignorer. Ils complètent les annonces et la surveillance des usages ; ils ne réalisent pas la migration à sa place.
Lorsqu'un contrat n'est plus accepté, donnez une erreur qui l'explique et indique où trouver les versions prises en charge. Un client peut alors déterminer s'il sait en utiliser une autre.
Ne lui demandez pas de changer aveuglément une valeur de version. Une nouvelle version peut modifier le sens des données ou des actions. L'agent doit lire les différences et vérifier qu'il peut poursuivre la tâche.
Le code de statut dépend de ce qui est retiré. 410 Gone convient à une ressource retirée de façon permanente ; il ne remplace pas une politique d'erreur adaptée à toutes les formes de négociation de version.
Une réponse hypermédia peut fournir les destinations et les actions disponibles. Le client suit ces contrôles au lieu de construire toutes les adresses à partir de souvenirs ou d'exemples.
Il doit toujours comprendre le type de média, les relations de lien et la signification des opérations. L'hypermédia réduit certaines dépendances aux chemins ; il ne rend pas compatible n'importe quel changement métier.
Un agent qui parcourt l'API peut bénéficier de cette découverte, à condition que les informations restent lisibles et que les erreurs lui permettent de reprendre.
Conservez des parcours représentatifs : lecture, création, modification et traitement d'une erreur. Exécutez-les avec l'ancien contrat et le nouveau. Vérifiez aussi qu'un client ancien reçoit une information utile pendant la transition.
Suivez le trafic par version pour connaître les consommateurs qui n'ont pas migré. Définissez la date de retrait et les possibilités de retour avant de modifier le comportement par défaut.
La version n'est qu'un repère. La migration devient fiable lorsque le client peut identifier le changement, comprendre ce qu'il implique et vérifier le résultat de sa nouvelle demande.
Explorer
Choisis dans l’index d’après les étiquettes de cet article — les plus proches d’abord, hors de sa série. Rien n’est écrit à la main : un article publié demain avec les mêmes étiquettes y prendra place.
Une réponse perdue ne signifie pas que l’opération a échoué. Méthodes HTTP, clés d’idempotence et suivi du résultat aident à réessayer sans créer de doublon.
GET sert souvent les vues de lecture, tandis que les écritures demandent une décision métier. REST et CQRS se combinent sans imposer le même découpage.
Une dépendance ne répond plus : servir une copie, attendre ou refuser dépend de l’opération. Les réponses HTTP doivent rendre ce choix clair pour le client.
Laisser un commentaire
Votre commentaire sera relu avant d'être publié.