Faire évoluer une API utilisée par des agents sans casser leurs parcours
Un agent doit pouvoir identifier le contrat utilisé et comprendre son évolution. Versions, dépréciation, liens et erreurs explicites facilitent la migration.
Article
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.
Le service de stock ne répond plus. Votre API peut encore afficher une copie du catalogue, mais peut-elle confirmer qu'un produit est disponible ? La réponse dépend de l'engagement pris envers le client. Un mode dégradé utile précise ce qui est connu, ce qui reste incertain et ce que le client peut faire ensuite.
Consulter une description et réserver le dernier exemplaire ne demandent pas les mêmes garanties. Une copie ancienne peut suffire à la première opération, mais pas nécessairement à la seconde.
Le théorème CAP formalise un arbitrage en présence d'une partition réseau. Il ne signifie pas que tout retard, tout verrou ou toute erreur d'API relève d'une partition.
Le contrat de l'API doit néanmoins traiter ces situations concrètes : données anciennes, dépendance absente, résultat inconnu ou travail encore en cours.
Un catalogue mis à jour il y a trente secondes peut rester utile. La réponse doit permettre de comprendre sa fraîcheur lorsque celle-ci influence la décision du client.
L'en-tête HTTP Age décrit l'âge estimé d'une réponse dans le mécanisme de cache. Il ne mesure pas directement le retard des données métier : une réponse produite à l'instant peut contenir une projection ancienne.
Une date d'actualisation ou une version de projection peut donc être nécessaire en complément. Le nom du champ doit préciser ce qui a été mis à jour.
Les directives comme stale-if-error permettent certains usages de réponses périmées selon les conditions du cache. Elles ne doivent pas servir à contourner une exigence de fraîcheur définie pour l'opération.
| Statut | Situation décrite |
|---|---|
503 Service Unavailable | Le service est temporairement incapable de traiter la demande, notamment en cas de surcharge ou de maintenance. |
504 Gateway Timeout | Une passerelle ou un proxy n'a pas reçu à temps la réponse nécessaire d'un serveur amont. |
502 Bad Gateway | Une passerelle ou un proxy a reçu une réponse invalide d'un serveur amont. |
409 Conflict | La demande entre en conflit avec l'état courant de la ressource. |
412 Precondition Failed | Une précondition HTTP envoyée par le client n'est pas satisfaite. |
Un corps d'erreur structuré peut préciser la cause connue et le moyen de reprendre. Il faut éviter d'annoncer une cause certaine lorsque le serveur ne dispose que d'un délai dépassé.
Retry-After peut suggérer une attente dans les situations prévues par HTTP. Ce délai ne garantit pas que le service sera revenu et ne rend pas une opération non idempotente sûre à répéter.
Si le système peut conserver durablement une demande pour la traiter plus tard, il peut répondre 202 Accepted avec une ressource de suivi.
Le client sait alors que la demande a été acceptée, mais que son résultat final n'est pas encore connu. Ce contrat ne contourne pas CAP : il propose une opération avec une autre garantie, celle de la prise en charge différée.
Certains métiers autorisent aussi un service limité pendant une coupure, avec un plafond ou une réservation préalable. Les règles et le risque accepté doivent être définis côté serveur.
Une recherche peut renvoyer les résultats disponibles tout en signalant qu'une source n'a pas répondu. Le client doit pouvoir distinguer une liste complète d'une réponse partielle.
De même, une référence absente ne signifie pas toujours que l'objet a été supprimé. Il peut être inaccessible, non autorisé ou pas encore synchronisé. Le serveur ne doit affirmer que ce qu'il sait, sans révéler d'informations interdites.
Si une donnée manquante est indispensable à une décision, la masquer ne résout pas le problème. Le parcours doit attendre, refuser ou demander une intervention selon ses règles.
Après le retour de la dépendance, il faut rattraper les projections ou réconcilier les états. Le client doit pouvoir consulter le résultat des opérations restées en attente.
Testez la coupure, le retour du service et une réponse perdue après réussite. Vérifiez aussi les règles de répétition des requêtes.
Une bonne réponse dégradée donne une information utilisable sans promettre davantage que le système ne garantit. Le code, les en-têtes et le corps participent ensemble à ce contrat.
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.
Un agent doit pouvoir identifier le contrat utilisé et comprendre son évolution. Versions, dépréciation, liens et erreurs explicites facilitent la migration.
Au retour du réseau, les données peuvent diverger et certains paiements être déjà faits. Comment remettre les copies à jour et traiter les effets à corriger.
Un service ralentit ou un message revient en double : timeout, retry, outbox et idempotence répondent à des risques différents. Voici comment les combiner.
Laisser un commentaire
Votre commentaire sera relu avant d'être publié.