17 sept. 2025·8 min de lecture

Versionner une API pour apps mobiles : faire évoluer les endpoints sans casser les clients

Versioning d’API pour apps mobiles expliquĂ© avec un plan de dĂ©ploiement simple, des changements rĂ©trocompatibles et des Ă©tapes de dĂ©prĂ©ciation pour que les anciennes versions restent fonctionnelles.

Versionner une API pour apps mobiles : faire évoluer les endpoints sans casser les clients

Pourquoi les changements d’API cassent les utilisateurs mobiles

Les applications mobiles ne se mettent pas toutes Ă  jour en mĂȘme temps. MĂȘme si vous publiez un correctif aujourd’hui, beaucoup de personnes garderont une ancienne version pendant des jours ou des semaines. Certains dĂ©sactivent les mises Ă  jour automatiques. D’autres manquent d’espace. Certains n’ouvrent tout simplement pas l’app souvent. Le dĂ©lai des validations sur les stores et les releases progressives ajoutent encore du retard.

Cet Ă©cart compte parce que votre backend Ă©volue gĂ©nĂ©ralement plus vite que vos clients mobiles. Si le serveur modifie un endpoint et que l’ancienne app continue de l’appeler, l’app peut se casser mĂȘme si rien n’a changĂ© sur le tĂ©lĂ©phone de l’utilisateur.

Les rĂ©gressions n’apparaissent que rarement comme un message d’erreur clair. Elles ressemblent plutĂŽt Ă  des problĂšmes produits quotidiens :

  • L’authentification ou l’inscription Ă©choue aprĂšs une mise Ă  jour backend
  • Les listes semblent vides parce qu’un champ a Ă©tĂ© renommĂ© ou dĂ©placĂ©
  • L’app plante en lisant une valeur manquante
  • Les paiements Ă©chouent parce que la validation est plus stricte
  • Des fonctionnalitĂ©s disparaissent silencieusement parce que la forme de la rĂ©ponse a changĂ©

Le but du versioning est simple : continuer Ă  amĂ©liorer le serveur sans forcer tout le monde Ă  mettre Ă  jour immĂ©diatement. Traitez votre API comme un contrat de long terme. Les nouvelles versions de l’app doivent fonctionner avec le comportement serveur neuf, et les versions plus anciennes doivent rester opĂ©rationnelles assez longtemps pour respecter les cycles de mise Ă  jour rĂ©els.

Pour la plupart des applications grand public, attendez-vous Ă  supporter plusieurs versions d’app en parallĂšle. Les apps internes peuvent parfois aller plus vite, mais ce n’est rarement instantanĂ©. Planifier le chevauchement Ă©vite que chaque release backend ne devienne un pic de support.

Ce que signifie « compatible » pour un contrat d’API

Un contrat d’API est la promesse entre votre app mobile et votre serveur : quelle URL appeler, quelles entrĂ©es sont acceptĂ©es, Ă  quoi ressemble la rĂ©ponse et que signifie chaque champ. Quand l’app dĂ©pend de cette promesse et que le serveur la modifie, les utilisateurs le ressentent sous forme de plantages, donnĂ©es manquantes ou fonctionnalitĂ©s qui cessent de fonctionner.

Un changement est compatible quand les anciennes versions de l’app peuvent continuer Ă  utiliser l’API sans changer de code. ConcrĂštement, cela signifie que le serveur comprend toujours ce que les anciennes apps envoient et renvoie des rĂ©ponses que ces apps peuvent parser.

Une façon rapide de séparer les changements sûrs des changements risqués :

  • Breaking changes : suppression ou renommage d’un champ, changement de type (nombre → chaĂźne), rendre un champ optionnel obligatoire, changer le format d’erreur, durcir la validation de façon que les anciennes apps ne satisfassent plus.
  • Changements gĂ©nĂ©ralement sĂ»rs : ajout d’un nouveau champ optionnel, ajout d’un nouvel endpoint, accepter d’ancien et nouveau formats de requĂȘte, ajouter des valeurs d’énumĂ©ration (seulement si l’app traite les valeurs inconnues comme « autre »).

La compatibilitĂ© nĂ©cessite aussi un plan de fin de vie. Retirer un comportement ancien est acceptable, mais cela doit ĂȘtre programmĂ© (par exemple « conserver v1 pendant 90 jours aprĂšs le lancement de v2 ») afin d’évoluer sans surprendre les utilisateurs.

Approches courantes de versioning et compromis

Le versioning vise à offrir aux builds plus anciennes un contrat stable pendant que vous avancez. Il existe plusieurs approches courantes, chacune déplaçant la complexité ailleurs.

Versioning dans l’URL

Mettre la version dans le chemin (par exemple /v1/ et /v2/) est le plus simple Ă  voir et Ă  dĂ©boguer. Cela fonctionne bien avec le cache, le logging et le routage parce que la version fait partie de l’URL. Le revers est que les Ă©quipes peuvent finir par maintenir des handlers parallĂšles plus longtemps que prĂ©vu, mĂȘme quand la diffĂ©rence est minime.

Versioning via les en-tĂȘtes

Avec le versioning par en-tĂȘte, le client envoie une version dans un header (par exemple un Accept ou un header personnalisĂ©). Les URLs restent propres et vous pouvez faire Ă©voluer l’API sans changer chaque chemin. L’inconvĂ©nient est la visibilité : les proxys, les logs et les humains ratent souvent la version Ă  moins d’ĂȘtre vigilants, et les clients mobiles doivent dĂ©finir l’en-tĂȘte de façon fiable sur chaque requĂȘte.

Versioning via paramĂštre de requĂȘte

Le versioning par paramĂštre (comme ?v=2) semble simple, mais devient vite bordĂ©lique. Les paramĂštres se retrouvent dans des bookmarks, outils d’analyse et scripts, et vous pouvez vous retrouver avec plusieurs « versions » flottantes sans propriĂ©tĂ© claire.

Si vous voulez une comparaison simple :

  • Versioning URL : le plus facile Ă  inspecter, mais peut crĂ©er des APIs parallĂšles qui vivent longtemps
  • Versioning header : URLs propres, mais plus difficile Ă  dĂ©panner
  • Versioning query : rapide Ă  dĂ©marrer, facile Ă  mal utiliser

Les feature flags sont un autre outil. Ils permettent de changer le comportement derriĂšre le mĂȘme contrat (par exemple un nouvel algorithme de classement) sans crĂ©er une nouvelle version d’API. Ils ne remplacent pas le versioning quand la forme des requĂȘtes ou des rĂ©ponses doit changer.

Choisissez une approche et tenez-vous-y. La cohérence compte plus que le choix « parfait ».

RÚgles pratiques pour les changements rétrocompatibles

La mentalitĂ© la plus sĂ»re : les clients plus anciens doivent continuer Ă  fonctionner mĂȘme s’ils n’apprennent jamais votre nouvelle fonctionnalitĂ©. Cela signifie gĂ©nĂ©ralement ajouter des choses, pas changer ce qui existe dĂ©jĂ .

PrivilĂ©giez les changements additifs : nouveaux champs, nouveaux endpoints, nouveaux paramĂštres optionnels. Quand vous ajoutez quelque chose, rendez-le vraiment optionnel cĂŽtĂ© serveur. Si une ancienne app ne l’envoie pas, le serveur doit se comporter exactement comme avant.

Quelques habitudes évitent la plupart des régressions :

  • Ajoutez des champs, mais ne changez pas le type ou le sens des champs existants.
  • Traitez les entrĂ©es manquantes comme normales et utilisez des valeurs par dĂ©faut sensĂ©es.
  • Ignorez les champs de requĂȘte inconnus pour que anciens et nouveaux clients coexistent.
  • Gardez le format des erreurs stable. Si vous devez le changer, versionnez le payload d’erreur.
  • Si le comportement doit changer, introduisez un nouvel endpoint ou une nouvelle version plutĂŽt qu’un « tweak » silencieux.

Évitez de changer la signification d’un champ existant sans incrĂ©ment de version. Par exemple, si status=1 signifiait « payé » et que vous le rĂ©utilisez pour « autorisé », les anciennes apps prendront de mauvaises dĂ©cisions et vous pourriez ne pas le remarquer avant les plaintes.

Les renommages et suppressions exigent un plan. Le schĂ©ma le plus sĂ»r est de garder l’ancien champ et d’ajouter le nouveau en parallĂšle un certain temps. Renseignez les deux dans les rĂ©ponses, acceptez les deux dans les requĂȘtes et loggez qui utilise encore l’ancien champ. Supprimez l’ancien champ seulement aprĂšs la fenĂȘtre de dĂ©prĂ©ciation.

Une petite habitude puissante : quand vous introduisez une nouvelle rĂšgle mĂ©tier requise, ne demandez pas au client de la prendre en charge dĂšs le premier jour. Appliquez la rĂšgle cĂŽtĂ© serveur avec une valeur par dĂ©faut d’abord, puis exigez que le client envoie la nouvelle valeur quand la majoritĂ© des utilisateurs sera mise Ă  jour.

Définir une politique simple de versioning et de dépréciation

Accélérez avec du no-code
Créez des outils internes et des portails clients plus rapidement, avec des API qui peuvent évoluer en toute sécurité.
Essayez AppMaster

Le versioning marche mieux quand les rÚgles sont ennuyeuses et écrites. Gardez la politique assez courte pour que produit, mobile et backend la suivent vraiment.

Commencez par des fenĂȘtres de support. DĂ©cidez combien de temps vous garderez d’anciennes versions d’API actives aprĂšs la sortie d’une nouvelle (par exemple 6–12 mois), plus des exceptions (sĂ©curitĂ©, obligations lĂ©gales).

Ensuite, dĂ©finissez comment vous prĂ©venez les clients avant de les casser. Choisissez un signal de dĂ©prĂ©ciation et utilisez-le partout. Options courantes : un en-tĂȘte de rĂ©ponse Deprecation: true avec une date de retrait, ou un champ JSON comme "deprecation": {"will_stop_working_on": "2026-04-01"} sur certaines rĂ©ponses. L’important est la cohĂ©rence : les clients peuvent le dĂ©tecter, les tableaux de bord le rapporter, et le support l’expliquer.

DĂ©finissez une version minimale d’app supportĂ©e et soyez explicite sur l’application de cette rĂšgle. Évitez les blocages surprises. Une approche pratique :

  1. Retourner un avertissement doux (par exemple un champ qui dĂ©clenche une invite de mise Ă  jour dans l’app).
  2. N’appliquer une restriction qu’aprĂšs un dĂ©lai communiquĂ©.

Si vous bloquez les requĂȘtes, retournez un payload d’erreur clair avec un message humain et un code machine lisible.

Enfin, décidez qui peut approuver les breaking changes et quelle documentation est requise. Gardez-le simple :

  • Un propriĂ©taire approuve les breaking changes.
  • Une note de changement courte explique ce qui a changĂ©, qui est affectĂ© et le chemin de migration.
  • Un plan de test inclut au moins une ancienne version d’app.
  • Une date de retrait est fixĂ©e au dĂ©but de la dĂ©prĂ©ciation.

Plan de déploiement étape par étape qui garde les anciennes apps fonctionnelles

Créez des API mobiles plus sûres
Concevez et déployez un backend versionné sans coder chaque endpoint.
Essayez AppMaster

Les utilisateurs mobiles ne mettent pas tous Ă  jour le mĂȘme jour. L’approche la plus sĂ»re est de publier une nouvelle API tout en laissant l’ancienne intacte, puis transfĂ©rer le trafic progressivement.

D’abord, dĂ©finissez ce que fait v2 et verrouillez le comportement de v1. Traitez v1 comme une promesse : mĂȘmes champs, mĂȘmes sens, mĂȘmes codes d’erreur. Si v2 nĂ©cessite une forme de rĂ©ponse diffĂ©rente, ne modifiez pas v1 pour qu’elle corresponde.

Ensuite, exĂ©cutez v2 en parallĂšle. Cela peut signifier des routes sĂ©parĂ©es (comme /v1/... et /v2/...) ou des handlers sĂ©parĂ©s derriĂšre la mĂȘme gateway. Conservez la logique partagĂ©e Ă  un seul endroit, mais gardez le contrat sĂ©parĂ© pour qu’un refactor v2 ne change pas accidentellement v1.

Puis mettez Ă  jour l’app mobile pour prĂ©fĂ©rer v2. ImplĂ©mentez un fallback simple : si v2 renvoie "not supported" (ou une autre erreur connue), retenter en v1. Cela aide pendant les releases progressives et quand les rĂ©seaux rĂ©els deviennent compliquĂ©s.

AprĂšs la sortie de l’app, surveillez l’adoption et les erreurs. VĂ©rifications utiles :

  • volume de requĂȘtes v1 vs v2 par version d’app
  • taux d’erreur et latence pour v2
  • Ă©checs d’analyse de rĂ©ponse
  • plantages liĂ©s aux Ă©crans rĂ©seau

Quand v2 est stable, ajoutez des avertissements de dĂ©prĂ©ciation clairs pour v1 et communiquez un calendrier. Retirez v1 seulement quand l’usage passe sous un seuil acceptable (par exemple <1–2% pendant plusieurs semaines).

Exemple : vous changez GET /orders pour supporter le filtrage et de nouveaux statuts. v2 ajoute status_details tandis que v1 reste identique. La nouvelle app appelle v2, mais si elle tombe sur un cas limite elle retombe sur v1 et affiche toujours la liste des commandes.

Conseils d’implĂ©mentation cĂŽtĂ© serveur

La plupart des rĂ©gressions pendant les rollouts surviennent parce que la gestion des versions est dispersĂ©e dans les contrĂŽleurs, helpers et le code de base de donnĂ©es. Gardez la dĂ©cision « quelle version pour cette requĂȘte ? » en un seul endroit, et le reste du code doit rester prĂ©visible.

Placez le routage de version derriĂšre une seule porte

Choisissez un signal (segment d’URL, header, ou numĂ©ro de build de l’app) et normalisez-le tĂŽt. Routez vers le bon handler dans un module ou middleware unique pour que chaque requĂȘte suive le mĂȘme chemin.

Un pattern pratique :

  • Parsez la version une fois (et loggez-la).
  • Mappez la version Ă  un handler (v1, v2, ...) dans un registre unique.
  • Gardez les utilitaires partagĂ©s agnostiques de version (parsing de date, vĂ©rifications d’auth), pas la logique de forme de rĂ©ponse.

Faites attention au partage de code entre versions. Corriger un bug v2 dans du code « partagé » peut changer accidentellement le comportement v1. Si la logique affecte les champs de sortie ou les rÚgles de validation, gardez-la versionnée ou couvrez-la par des tests spécifiques à la version.

Gardez les changements de données compatibles pendant le rollout

Les migrations de base doivent fonctionner pour les deux versions en mĂȘme temps. Ajoutez d’abord des colonnes, backfillez si nĂ©cessaire, puis supprimez ou resserrez les contraintes plus tard. Évitez de renommer ou de changer la sĂ©mantique en plein rollout. Si vous devez supporter deux formats, Ă©crivez les deux formats pendant une courte pĂ©riode jusqu’à ce que la majoritĂ© des clients migre.

Rendez les erreurs prĂ©visibles. Les anciennes apps interprĂštent souvent les erreurs inconnues comme « quelque chose s’est mal passé ». Utilisez des status codes cohĂ©rents, des identifiants d’erreur stables et des messages courts qui aident le client Ă  dĂ©cider (rĂ©essayer, se rĂ©authentifier, inviter Ă  mettre Ă  jour).

Enfin, protĂ©gez-vous contre les champs manquants que les anciennes apps n’envoient pas. Utilisez des valeurs par dĂ©faut sĂ»res et validez avec des dĂ©tails d’erreur clairs et stables.

Considérations cÎté mobile qui affectent le versioning

Rendez la logique de version prévisible
Centralisez le routage et la logique de version avec des processus métier visuels.
Essayer maintenant

Puisque les utilisateurs peuvent rester sur une ancienne build pendant des semaines, le versioning doit supposer que plusieurs versions clientes toucheront vos serveurs en mĂȘme temps.

Un gros avantage est la tolĂ©rance cĂŽtĂ© client. Si l’app plante ou n’arrive pas Ă  parser quand le serveur ajoute un champ, vous verrez des bugs « alĂ©atoires » de rollout.

  • Ignorez les champs JSON inconnus.
  • Traitez les champs manquants comme normaux et utilisez des valeurs par dĂ©faut.
  • GĂ©rez les nulls sans planter (les champs peuvent devenir nullables pendant des migrations).
  • Ne dĂ©pendez pas de l’ordre des tableaux sauf si le contrat le garantit.
  • Gardez le traitement des erreurs convivial (un Ă©tat de rĂ©essai vaut mieux qu’un Ă©cran vide).

Le comportement réseau compte aussi. Pendant un rollout vous pouvez avoir briÚvement des versions de serveurs mixtes derriÚre des load balancers ou caches, et les réseaux mobiles amplifient les petits soucis.

Choisissez des rĂšgles claires de timeout et retry : timeouts courts pour les lectures, un peu plus longs pour les uploads, et des retries limitĂ©s avec backoff. Rendre l’idempotence standard pour les appels de crĂ©ation ou de paiement Ă©vite les doubles envois lors d’un retry.

Les changements d’auth sont la maniĂšre la plus rapide d’exclure les anciennes apps. Si vous changez le format du token, les scopes requis ou les rĂšgles de session, gardez une fenĂȘtre de chevauchement oĂč anciens et nouveaux tokens sont acceptĂ©s. Si vous devez faire une rotation de clĂ©s ou de claims, planifiez une migration progressive, pas une coupure le mĂȘme jour.

Envoyez les mĂ©tadonnĂ©es de l’app avec chaque requĂȘte (par exemple version d’app et plateforme). Cela facilite le retour d’avertissements ciblĂ©s sans forker l’API entiĂšre.

Surveillance et rollouts progressifs sans surprises

Un dĂ©ploiement progressif ne fonctionne que si vous voyez ce que font les diffĂ©rentes versions d’app. Le but est simple : savoir qui est encore sur d’anciens endpoints et dĂ©tecter les problĂšmes avant qu’ils n’affectent tout le monde.

Commencez par suivre l’usage par version d’API chaque jour. Ne comptez pas seulement les requĂȘtes totales. Suivez les appareils actifs et segmentez les endpoints clĂ©s comme login, profil et paiements. Cela vous indique si une ancienne version est toujours « vivante » mĂȘme si le trafic total semble faible.

Ensuite surveillez les erreurs par version et par type. Une hausse des 4xx indique souvent un dĂ©calage de contrat (champ requis changĂ©, valeurs d’énumĂ©ration dĂ©placĂ©es, rĂšgles d’auth plus strictes). Une hausse des 5xx pointe souvent vers des rĂ©gressions serveur (mauvais dĂ©ploiement, requĂȘtes lentes, dĂ©faillance d’un dĂ©pendance). Voir les deux par version aide Ă  choisir la bonne action rapidement.

Utilisez des rollouts par Ă©tapes dans les stores pour limiter la zone d’impact. Augmentez l’exposition par paliers et observez les mĂȘmes tableaux aprĂšs chaque Ă©tape (par ex. 5%, 25%, 50%). Si la nouvelle version montre des problĂšmes, arrĂȘtez le rollout avant une panne gĂ©nĂ©rale.

Ayez des dĂ©clencheurs de rollback Ă©crits Ă  l’avance, pas dĂ©cidĂ©s pendant l’incident. DĂ©clencheurs frĂ©quents :

  • taux d’erreur au-dessus d’un seuil fixe pendant 15–30 minutes
  • baisse du taux de connexion (ou augmentation des Ă©checs de refresh token)
  • hausse des Ă©checs de paiement (ou allongement des timeouts du checkout)
  • pic de tickets support liĂ© Ă  une version prĂ©cise
  • augmentation de la latence sur un endpoint critique

Gardez un petit playbook d’incident pour les pannes liĂ©es aux versions : qui pager, comment dĂ©sactiver un flag risquĂ©, quelle release serveur rollbacker, et comment prolonger la fenĂȘtre de dĂ©prĂ©ciation si des clients anciens sont toujours actifs.

Exemple : faire Ă©voluer un endpoint lors d’une release rĂ©elle

Exécutez des versions d'API en parallÚle
CrĂ©ez v1 et v2 cĂŽte Ă  cĂŽte et gardez les anciennes versions d’applications fonctionnelles.
Commencer

Le checkout est un changement classique en production. Vous commencez avec un flux simple, puis vous ajoutez une étape de paiement (authentification plus forte) et renommez des champs pour coller au vocabulaire métier.

Supposons que votre app mobile appelle POST /checkout.

Ce qui reste en v1 vs ce qui change en v2

En v1, conservez la requĂȘte et le comportement existants pour que les anciennes builds puissent finir les paiements sans surprise. En v2, introduisez le nouveau flux et des noms plus propres.

  • v1 conserve : amount, currency, card_token, et une rĂ©ponse unique comme status=paid|failed.
  • v2 ajoute : payment_method_id (remplaçant card_token) et un champ next_action pour que l’app gĂšre une Ă©tape supplĂ©mentaire (vĂ©rifier, rĂ©essayer, rediriger).
  • v2 renomme : amount en total_amount et currency en billing_currency.

Les anciennes apps continuent de fonctionner parce que le serveur applique des valeurs par dĂ©faut sĂ»res. Si une requĂȘte v1 ne connaĂźt pas next_action, le serveur complĂšte le paiement quand c’est possible et renvoie le rĂ©sultat au format v1. Si la nouvelle Ă©tape est requise, v1 reçoit un code d’erreur clair et stable comme requires_update au lieu d’un Ă©chec gĂ©nĂ©rique confus.

Adoption, retrait et rollback

Suivez l’adoption par version : part des appels checkout sur v2, taux d’erreur, et combien d’utilisateurs tournent encore sur des builds qui ne prennent en charge que v1. Quand l’usage de v2 est constamment Ă©levĂ© (par ex. ≄95% plusieurs semaines) et que l’usage de v1 est faible, fixez une date de retrait de v1 et communiquez-la (notes de release, messages in-app).

Si quelque chose se passe mal aprĂšs le lancement, le rollback doit ĂȘtre banal :

  • Orientez plus de trafic vers le comportement v1.
  • DĂ©sactivez l’étape de paiement nouvelle via un flag serveur.
  • Continuez d’accepter les deux jeux de champs et loggez ce que vous avez auto-converti.

Erreurs fréquentes qui provoquent des ruptures silencieuses

Générez un backend réel
ModĂ©lisez les donnĂ©es en minutes et gĂ©nĂ©rez un backend Go prĂȘt pour la production.
Créer un backend

La plupart des pannes mobiles ne font pas de bruit. La requĂȘte rĂ©ussit, l’app tourne, mais les utilisateurs voient des donnĂ©es manquantes, des totaux erronĂ©s ou des boutons inactifs. Ces problĂšmes sont difficiles Ă  repĂ©rer car ils frappent souvent des versions d’app anciennes pendant un rollout progressif.

Causes courantes :

  • Changer ou supprimer des champs (ou leur type) sans plan de version clair.
  • Rendre un nouveau champ de requĂȘte immĂ©diatement obligatoire, si bien que les anciennes apps sont rejetĂ©es.
  • Publier une migration de base de donnĂ©es qui suppose que seule la nouvelle app existe.
  • Retirer v1 en se basant sur les installations plutĂŽt que l’usage actif.
  • Oublier les jobs background et webhooks qui envoient encore de vieux payloads.

Un exemple concret : votre champ de rĂ©ponse total Ă©tait une chaĂźne ("12.50") et vous le transformez en nombre (12.5). Les nouvelles apps vont bien. Les anciennes peuvent le traiter comme zĂ©ro, le cacher, ou planter seulement sur certains Ă©crans. Sans surveillance des erreurs par version d’app, cela peut passer inaperçu.

Checklist rapide et prochaines étapes

Le versioning porte moins sur le nom des endpoints que sur la rĂ©pĂ©tition des mĂȘmes contrĂŽles de sĂ©curitĂ© Ă  chaque release.

Vérifications rapides avant la release

  • Favorisez les changements additifs. Ne supprimez pas ou ne renommez pas les champs que les anciennes apps lisent.
  • Fournissez des valeurs par dĂ©faut sĂ»res pour que les champs nouveaux manquants se comportent comme avant.
  • Gardez les rĂ©ponses d’erreur stables (status + forme + signification).
  • Traitez les enums avec soin et ne changez pas la signification d’une valeur existante.
  • Rejouez quelques requĂȘtes rĂ©elles d’anciennes versions d’app et confirmez que les rĂ©ponses se parsĂšment toujours.

Vérifications rapides pendant le rollout et avant le retrait

  • Suivez l’adoption par version d’app. Vous voulez une courbe claire de v1 vers v2, pas une ligne plate.
  • Surveillez les taux d’erreur par version. Un pic indique souvent un problĂšme de parsing ou validation pour les anciens clients.
  • Corrigez d’abord le endpoint le plus dĂ©faillant, puis Ă©largissez le rollout.
  • Retirez seulement quand l’usage actif est vraiment faible, et communiquez la date.
  • Supprimez le code de fallback en dernier, aprĂšs la fenĂȘtre de dĂ©prĂ©ciation.

RĂ©digez votre politique de versioning et de dĂ©prĂ©ciation sur une seule page, puis transformez la checklist en une gate de release que l’équipe suit Ă  chaque fois.

Si vous construisez des outils internes ou des apps client avec une plateforme no-code, cela reste utile de traiter l’API comme un contrat avec une fenĂȘtre de dĂ©prĂ©ciation claire. Pour les Ă©quipes utilisant AppMaster (appmaster.io), garder v1 et v2 cĂŽte Ă  cĂŽte est souvent plus simple car vous pouvez rĂ©gĂ©nĂ©rer backend et clients au fur et Ă  mesure tout en maintenant les anciens contrats pendant le rollout.

FAQ

Pourquoi les changements cĂŽtĂ© backend cassent-ils les applications mobiles alors que les utilisateurs n’ont rien mis Ă  jour ?

Les utilisateurs mobiles ne mettent pas tous l’app Ă  jour en mĂȘme temps, donc des versions plus anciennes continuent d’appeler votre backend aprĂšs un dĂ©ploiement. Si vous changez un endpoint, la validation ou la forme de la rĂ©ponse, ces anciennes versions ne peuvent pas s’adapter et elles Ă©chouent, avec des symptĂŽmes comme des Ă©crans vides, des plantages ou des paiements qui n’aboutissent pas.

Que signifie réellement « rétrocompatible » pour une API mobile ?

« Compatible » signifie qu’une application plus ancienne peut continuer Ă  faire les mĂȘmes requĂȘtes et recevoir des rĂ©ponses qu’elle sait analyser et utiliser correctement, sans modification du code. Le modĂšle mental simple : l’API est un contrat ; vous pouvez ajouter des capacitĂ©s, mais ne changez pas la signification des champs et comportements existants pour les clients actuels.

Quels sont les changements les plus courants qui provoquent des ruptures dans les API mobiles ?

Un changement est bloquant quand il modifie quelque chose dont une app existante dĂ©pend : suppression ou renommage de champs, changement de type, validation plus stricte qui rejette d’anciennes requĂȘtes, ou modification du format d’erreur. Si une ancienne app ne peut plus parser la rĂ©ponse ou satisfaire les rĂšgles de la requĂȘte, c’est une rupture, mĂȘme si le serveur semble « fonctionner ».

Dois-je utiliser le versioning par URL ou par header pour une API mobile ?

Le versioning dans l’URL est souvent le choix par dĂ©faut parce que la version est visible dans les logs, les outils de debug et le routage ; il est difficile d’oublier de l’envoyer. Le versioning par header marche aussi, mais il est plus facile Ă  rater lors du dĂ©pannage et oblige chaque requĂȘte cliente Ă  dĂ©finir correctement l’en-tĂȘte.

Combien de temps devons-nous garder les anciennes versions d’une API actives ?

Choisissez une fenĂȘtre de support claire qui correspond au comportement rĂ©el de mise Ă  jour mobile, et tenez-vous-y : beaucoup d’équipes choisissent des mois plutĂŽt que des jours. L’essentiel est d’avoir une date de retrait publiĂ©e et de mesurer l’usage actif pour ne pas deviner quand il est sĂ»r d’arrĂȘter une ancienne version.

Quelle est une façon pratique d’alerter les clients qu’une version d’API va ĂȘtre retirĂ©e ?

Utilisez un signal de dĂ©prĂ©ciation cohĂ©rent et unique pour que les clients et les tableaux de bord puissent le dĂ©tecter de façon fiable, par exemple un en-tĂȘte de rĂ©ponse stable ou un petit champ JSON contenant la date de retrait. Restez simple et prĂ©visible pour que le support et les Ă©quipes produit puissent l’expliquer facilement.

Comment faire Ă©voluer les rĂ©ponses sans casser les anciennes versions d’app ?

Favorisez les changements additifs : ajoutez des champs optionnels ou de nouveaux endpoints, et conservez les anciens champs avec la mĂȘme signification. Pour un renommage, gardez les deux champs en parallĂšle pendant un temps et remplissez les deux pour que les anciennes apps ne perdent pas de donnĂ©es pendant que les nouvelles passent au nouveau champ.

Comment gérer les changements de base de données quand v1 et v2 sont actives ?

Concevez les migrations pour que les deux versions d’API fonctionnent simultanĂ©ment : ajoutez d’abord des colonnes, backfillez si nĂ©cessaire, puis resserrez les contraintes ou supprimez d’anciens champs plus tard. Évitez de renommer ou de changer la sĂ©mantique au milieu d’un dĂ©ploiement, sinon une version Ă©crira des donnĂ©es que l’autre ne pourra pas lire.

Que doivent faire les applications mobiles pour ĂȘtre plus rĂ©silientes aux changements d’API ?

Rendez l’app cliente tolĂ©rante : ignorez les champs JSON inconnus, traitez les champs manquants comme normaux avec des valeurs par dĂ©faut sĂ»res, et gĂ©rez les nulls sans planter. Cela rĂ©duit les bugs « alĂ©atoires » pendant les dĂ©ploiements oĂč le serveur ajoute des champs ou les rĂ©ponses varient temporairement.

Que devons-nous surveiller pendant un déploiement progressif et quand est-il sûr de retirer v1 ?

Surveillez l’usage et les erreurs par version d’API et par version d’app, en particulier pour les endpoints critiques comme l’authentification et les paiements. Élargissez les dĂ©ploiements progressifs uniquement lorsque les donnĂ©es sont stables. Un plan sĂ»r verrouille le comportement v1, exĂ©cute v2 en parallĂšle et migre les clients progressivement avec des stratĂ©gies de fallback claires jusqu’à ce que l’adoption permette de retirer v1 en toute confiance.

Facile à démarrer
Créer quelque chose d'incroyable

Expérimentez avec AppMaster avec un plan gratuit.
Lorsque vous serez prĂȘt, vous pourrez choisir l'abonnement appropriĂ©.

Démarrer
Versionner une API pour apps mobiles : faire évoluer les endpoints sans casser les clients | AppMaster