Versions API : préparer une migration sans casser les clients

À retenir

Changer un numéro ne suffit pas à protéger les consommateurs d’une API. La compatibilité concerne les messages mais aussi les comportements dont dépendent les clients réels.

Banc de contrôle de composants et de modules électroniques, sans personnel Illustration · scène fictive
Dans cet article

Évaluer le changement du point de vue du client

Le tableau propose une grille de revue, pas une garantie universelle. Un champ ajouté peut perturber un lecteur strict ; une valeur d’énumération nouvelle peut casser un traitement exhaustif. Inventoriez les clients, leurs bibliothèques et leurs hypothèses avant de classer le changement.

ChangementRisque à vérifierPreuve attendue
Retirer ou renommer un champLecture devenue impossibleMigration explicite et tests clients.
Ajouter un champ facultatifLecteur strict ou conflit de nomTest des consommateurs existants.
Ajouter une valeur en réponseTraitement exhaustif incompletComportement prévu pour une valeur inconnue.
Changer une valeur par défautRésultat métier différentComparaison des scénarios sans valeur explicite.

Organiser la coexistence

  • Décrivez ancienne et nouvelle formes, valeurs par défaut, erreurs, pagination et règles d’autorisation. Exécutez des tests de contrat avec des cas représentatifs des consommateurs.
  • Choisissez une stratégie explicite de sélection de version. Distinguez version du service et version du document OpenAPI ; vérifiez les caches et les passerelles.
  • Publiez un calendrier, un guide de migration et un point de contact. Suivez l’usage réel des versions avec une télémétrie proportionnée et prévoyez un retour arrière compatible avec les données.

Distinguer dépréciation et arrêt

Deprecation signale qu’une ressource est dépréciée ; Sunset peut annoncer quand elle devrait devenir indisponible. Ces en-têtes complètent l’accompagnement sans migrer les clients. Ne retirez une version qu’après examen des consommateurs restants, de leurs obligations et de la procédure de reprise.

Références primaires

Pour approfondir

Versioning : décider selon l’impact consommateur

Ajouter un numéro à l’URL ne préserve pas à lui seul les clients existants. Un changement de type, de valeur attendue, de comportement ou de réponse d’erreur peut être incompatible même si le chemin reste identique.

  • Inventorier les clients actifs et leurs usages observés.
  • Tester les anciennes versions de clients contre le nouveau contrat.
  • Publier une période de coexistence et vérifier l’usage avant retrait.

Référence primaire : IETF RFC 9457 — Problem Details for HTTP APIs. Méthode connexe : consulter le guide pratique.

Tâches API asynchrones : suivre l’état, reprendre et annuler

Ne pas confondre requête acceptée, traitement démarré et résultat final d’une opération longue.

  • Compte, opération et identifiant
  • Transition, heure et source
  • Résultat, erreur ou effets restants
  • Même tâche retrouvée, droits vérifiés et issue ou incertitude explicitée

Cas de recette à reproduire

Exemple fictif : ces données ne décrivent aucun client ni résultat réel.

Voir les données du cas
{
    "job_id": "J-42",
    "timeline": [
        {
            "elapsed_seconds": 0,
            "http": 202,
            "state": "pending"
        },
        {
            "elapsed_seconds": 5,
            "http": 200,
            "state": "running"
        },
        {
            "elapsed_seconds": 6,
            "http": 200,
            "state": "cancel_requested"
        },
        {
            "elapsed_seconds": 7,
            "http": 200,
            "state": "succeeded"
        }
    ]
}

Décision attendue

Une réponse 200 au suivi ne signifie pas que le traitement est terminé. Après une demande d’annulation, seule l’issue confirmée permet de conclure.

Une annulation demandée trop tard

Scénario fictif : même tâche J-42, temps en secondes depuis la soumission. Les noms d’état relèvent du contrat de cet exemple ; HTTP ne les impose pas.

InstantRéponse et étatConclusion autorisée
+0 sHTTP 202 · pendingAccepté pour traitement ; aucun résultat final confirmé.
+5 sHTTP 200 · runningLa lecture du statut a réussi ; la tâche travaille encore.
+6 sHTTP 200 · cancel_requestedLa demande d’arrêt est enregistrée ; l’annulation reste à confirmer.
+7 sHTTP 200 · succeededLe traitement a gagné la course. Présenter la réussite observée et vérifier les effets ; ne pas annoncer « annulé ».

Microsoft — Asynchronous request-reply

202 signifie-t-il que la tâche est terminée ?

Non. Le traitement n’est pas nécessairement achevé. Le client doit pouvoir consulter une issue faisant foi.

Référence primaire : MDN — 202 Accepted. Méthode connexe : consulter le guide pratique.

Mise à jour logicielle : vérifier un changement de signataire

Décider si un livrable signé correspond toujours au producteur, au processus et à la version approuvés.

  • Avant de lire le nouveau paquet, consignez producteur, clé ou identité de certificat, émetteur et processus de construction autorisés. Reliez ces attentes au logiciel concerné et à un canal de confirmation déjà fiable. Le paquet à vérifier ne doit pas définir seul sa propre politique d’acceptation.
  • Rapprochez l’empreinte du fichier reçu de l’objet décrit par l’attestation. Vérifiez la signature avec les racines de confiance prévues, puis identité, constructeur et paramètres attendus. Une signature cryptographiquement valide provenant d’une autre identité ne satisfait pas la politique du service.
  • Testez une rotation annoncée, un émetteur inattendu, une signature absente et un fichier différent. Gardez le livrable en attente lorsque la nouvelle identité n’est pas confirmée. Enregistrez l’approbation du changement et une solution de retour ; une signature ne prouve pas l’absence de vulnérabilité.

Cas de recette à reproduire

Exemple fictif : ces données ne décrivent aucun client ni résultat réel.

Voir les données du cas
{
    "signature_valid": true,
    "digest_matches": true,
    "expected_signer": "approved-publisher",
    "observed_signer": "different-publisher",
    "expected": "hold_for_independent_confirmation"
}

Décision attendue

Exemple fictif : l’empreinte correspond et la signature est valide, mais le signataire observé diffère du signataire approuvé. L’installation reste en attente d’une confirmation indépendante du changement.

SLSA v1.2 — Verifying artifacts

Référence primaire : SLSA v1.2 — Verifying artifacts. Méthode connexe : consulter le guide pratique.

API : dépréciation et retrait

Préparer le retrait au-delà du numéro de version

Une version publiée ne dit pas quand les consommateurs doivent migrer. Relier les annonces de dépréciation, les dates de retrait et les tests des clients existants.

  • Distinguer Deprecation, Sunset et les liens vers les politiques.
  • Vérifier que Sunset n’est pas antérieur à Deprecation lorsque les deux dates sont fournies.
  • Mesurer les consommateurs restants et valider le remplacement avant une bascule.

Comparer les annonces de dépréciation et de retrait →

IETF · RFC 9745 · Deprecation · Standards Track · March 2025 · §2–5 · consulted 2026-10-23

IETF · RFC 8594 · Sunset · Informational · May 2019 · §3–5, §8 · consulted 2026-10-23