6 réponses

★ Meilleure réponse

Lancez les deux API en parallèle pendant un temps - gardez REST fonctionnant exactement comme avant tout en déployant GraphQL comme un nouveau point d'accès. Donnez aux clients le temps de migrer à leur rythme, peut-être un an ou plus selon combien en dépendent. Documentez bien le côté GraphQL pour que la migration semble facile, pas forcée. Une fois que la plupart auront basculé, vous pourrez déprécier REST progressivement avec suffisamment de préavis.

Faire tourner les deux en parallèle, ça marche, mais le vrai problème que personne ne mentionne, c'est que tu vas devoir garder ta couche base de données et ta logique métier synchronisées sur deux formes de requête différentes - une équipe va inévitablement dériver vers l'optimisation pour GraphQL tandis que les clients REST frappent le même backend et se demandent pourquoi ils ont des timeouts. Une approche plus propre, c'est de construire GraphQL par-dessus tes endpoints REST existants comme couche adaptateur d'abord, comme ça tu ne maintiens pas vraiment deux chemins de code différents, juste une couche de traduction qui prouve que le schéma fonctionne avant que tu touches au backend lui-même.

L'approche double API a du sens, mais voilà ce qui se fait souvent oublier : versionnez explicitement vos endpoints REST (comme `/api/v1/`) avant même d'introduire GraphQL. Ça te donne une séparation nette et ça veut dire que quand tu arrêteras REST, tu ne plantes pas les gens qui l'utilisent encore. Ils peuvent rester sur v1 à jamais s'ils en ont besoin, et tu as un chemin de dépréciation clair documenté dès le départ.

Le problème de synchronisation dont on a parlé est réel et galère. Ce qui aide vraiment, c'est de s'appuyer lourdement sur des adaptateurs internes ou une couche d'abstraction de requête - grosso modo un truc intermédiaire que REST et GraphQL peuvent appeler, comme ça ta logique métier reste DRY. Si tu construis des resolvers GraphQL qui se traduisent juste en les mêmes appels de service que tes contrôleurs REST, tu réduises les risques qu'ils s'éloignent et qu'ils servent des données différentes. C'est un peu plus de travail au début mais ça t'évite de debugger « pourquoi ce champ a des valeurs différentes dans GraphQL et REST » six mois plus tard.

Vaut aussi le coup de réfléchir : quels clients sont les plus importants ? Si tu as 100 services internes qui utilisent ton API REST par rapport à une poignée de consommateurs publics, ton calendrier de migration et ta stratégie de communication doivent être complètement différents. Les équipes internes peuvent aller plus vite, et tu peux vraiment forcer la migration. Les utilisateurs externes ont besoin de beaucoup plus de préavis et de patience.

le vrai problème que les gens minimisent, c'est que tu vas finir par maintenir deux documentations complètement séparées, deux SDKs et deux systèmes d'authentification si tu n'es pas prudent - ce qui veut dire que ton équipe support va se faire bombarder de questions sur quelle API utiliser, et les développeurs vont choisir la mauvaise. avant de lancer GraphQL, définis précisément combien de temps REST reste supporté (genre 18 mois avec une date limite ferme) et communique ça sans relâche, parce que l'ambiguïté c'est ce qui tue ces migrations. tu prévois de maintenir la parité des fonctionnalités entre les deux APIs pendant la transition, ou est-ce que GraphQL aura les nouvelles fonctionnalités en premier pour inciter les gens à passer?

Amy1987 asker Parité des fonctionnalités au départ, puis priorité à GraphQL pour les nouvelles fonctionnalités après 12 mois, pour encourager la migration sans frustrer les utilisateurs de REST.

N'essaie pas de faire en sorte que tes schémas REST et GraphQL se reflètent parfaitement l'un l'autre - c'est ce qui bloque les gens. Garde-les intentionnellement souples pour que GraphQL puisse reformuler les requêtes comme ça a du sens pour les clients, tandis que ta couche REST reste stable ; synchronise au niveau de la couche données, pas au niveau du contrat API, et tu vas éviter la plupart du cauchemar de maintenance qui vient d'essayer de maintenir deux interfaces identiques.

N'essaie pas de remplacer REST du jour au lendemain ou de faire une déprciation progressive en poussant déjà les clients vers le nouveau truc alors que l'ancien existe toujours - c'est là que tout casse, les gens sont confus sur quel endpoint utiliser, et tu te retrouves avec un écosystème fragmenté de toute façon.

Le chemin le plus propre, c'est de stabiliser d'abord ton API REST. Assure-toi qu'elle fait ce qu'elle doit faire, documente-la correctement, et ensuite ajoute GraphQL comme une couche de service complètement séparée au-dessus des mêmes sources de données. Ça veut dire que ta logique métier et ta base de données n'ont besoin de connaître aucun des deux formats d'API - ils parlent juste tous les deux au même système sous-jacent. Tu ne dupliques pas le code, tu ajoutes juste une autre façon de le requêter. Ça enlève la pression du problème de synchronisation qui apparaît quand tu essaies de garder deux patterns de requête différents en sync.

Fixe un calendrier réaliste où les deux coexistent vraiment - peut-être 18 mois, peut-être plus selon combien de clients tu as. Les trucs qui comptent vraiment : garde l'authentification cohérente sur les deux endpoints pour que les clients n'aient pas besoin d'apprendre de nouveaux patterns d'auth, maintiens une documentation claire pour chaque API sans les laisser dériver, et que quelqu'un (ou une équipe) soit vraiment responsable de les garder alignés. C'est pas du travail glamour, mais ça évite la situation où le support est submergé parce que personne ne sait quel endpoint un client devrait utiliser ou pourquoi son ancien code a soudainement arrêté de fonctionner.

Votre réponse

Se connecterpour répondre.