Versionnement
Comment arrivent les changements cassants — et pourquoi votre code existant continue de marcher.
La version de l'API vit dans le chemin de l'URL :
v1 est la version majeure actuelle. Les futurs changements cassants arrivent
en /v2, qui tourne côte à côte avec /v1 pendant une fenêtre de dépréciation.
Ce qu'on considère comme cassant
Tout changement susceptible de surprendre un client existant :
- Supprimer ou renommer un champ dans une réponse
- Changer le type d'un champ
- Supprimer un endpoint
- Ajouter un nouveau paramètre obligatoire
- Durcir la validation au point de rejeter des payloads auparavant valides
- Changer la signification d'un
coded'erreur
Ces changements arrivent dans une nouvelle version majeure.
Ce qu'on considère comme non cassant
Ces changements arrivent dans la version majeure actuelle, à toute release :
- Ajouter un champ optionnel à une réponse
- Ajouter un paramètre optionnel à une requête
- Ajouter un nouvel endpoint
- Ajouter un nouveau
coded'erreur (seuls les nouveaux chemins l'émettent) - Ajouter un nouveau scope
- Assouplir la validation (accepter des payloads auparavant rejetés)
Si vous écrivez votre client pour ignorer les champs JSON inconnus (la plupart des désérialiseurs le font par défaut), les ajouts ne vous cassent jamais.
Politique de dépréciation
Quand nous prévoyons de retirer une version :
- 6 mois de préavis via le changelog et un email à tous les propriétaires de tenant ayant des clés
- 3 mois avant l'arrêt : la version dépréciée émet un header HTTP
Sunsetà chaque appel - À l'arrêt : le chemin déprécié renvoie
410 Gone. Les appels à/v1redirigent (302) vers/v2uniquement si la forme de réponse est identique (rare pour des versions majeures).
Version émise par le serveur
Chaque réponse porte :
Utile pour les logs et l'observabilité. La valeur du header correspond au préfixe du chemin.
Patterns client recommandés
- Épinglez la version dans votre config :
const API_BASE = 'https://api.boxioo.com/v1' - Ne
JSON.stringifypas les champs que vous ne reconnaissez pas — passez-les tels quels comme blobs opaques si vous relayez - Loguez le
requestIddes enveloppes d'erreur ; citez-le dans les tickets