+ 33 6 68 40 27 75 contact@odeven.fr

Unifiez vos APIs GraphQL avec un Supergraph

par | Mar 22, 2024 | Concepts Objets

GraphQL, un langage de requête pour votre API, permet une communication efficace et flexible entre le client et le serveur. En permettant aux clients de demander précisément ce dont ils ont besoin, GraphQL optimise le trafic réseau. Cependant, à mesure que les applications et les architectures microservices se développent, gérer de multiples APIs GraphQL peut devenir difficile.

C’est ici qu’intervient le concept de Supergraph. Un Supergraph est une couche d’abstraction qui unifie plusieurs APIs GraphQL en une seule interface. Cette approche permet une gestion cohérente et centralisée des données, facilitant ainsi l’accès, l’intégration et la gouvernance des données à travers les services.

Pourquoi Unifier vos APIs avec un Supergraph?

  1. Simplification de l’architecture : Le Supergraph réduit la complexité en servant de point d’entrée unique pour toutes les requêtes GraphQL, éliminant ainsi le besoin de gérer plusieurs endpoints. Cela s’avère très pratique dans le cas d’une architecture microservices.
  2. Performance améliorée : En optimisant les requêtes à travers un point d’entrée unique, les performances réseau et le temps de réponse peuvent être améliorés.
  3. Facilité de maintenance : La centralisation de la gestion des schemas GraphQL facilite la maintenance, les mises à jour et l’intégration de nouvelles fonctionnalités ou services.
  4. Meilleure gouvernance des données : Unifiez la gouvernance et la sécurité à travers vos services en appliquant des politiques de sécurité et d’accès uniformes.

Solutions pour l’Implémentation d’un Supergraph

Il existe à ce jour deux solutions principalement utilisées dans l’écosystème GraphQL :

  1. GraphQL Federation : Une solution populaire pour construire un Supergraph, GraphQL Federation permet aux équipes de développer, versionner et déployer leurs services GraphQL indépendamment, tout en les unifiant sous un même Supergraph.
  2. Schema Stitching : Avant l’avènement de GraphQL Federation, le Schema Stitching était la méthode principale pour combiner des schemas GraphQL. Bien qu’elle soit moins utilisée aujourd’hui, elle reste une option viable pour certains cas d’utilisation.

1. GraphQL Federation

GraphQL Federation est un patron d’architecture conçue pour construire un schéma GraphQL unifié à partir de plusieurs services. Plutôt que de centraliser la logique et le schéma dans un seul endpoint, chaque service définit sa partie d’un schéma global. Ainsi, chaque service est responsable de son intégration au sein du Supergraph, facilitant alors le développement, la scalabilité et la maintenance de grandes applications.

Certains géants de l’industrie utilisent GraphQL Federation. Aussi, je vous invite ainsi à lire cet article très intéressant sur la mise en place de GraphQL Federation pour Netflix.

Principes de GraphQL Federation

  • Décentralisation : Chaque service gère sa propre partie du schéma GraphQL, rendant le développement et la maintenance plus gérables et moins susceptibles d’entraver la performance globale.
  • Cohérence : Malgré la décentralisation, GraphQL Federation assure une expérience cohérente pour le client, comme s’il interagissait avec un seul schéma GraphQL.
  • Évolutivité : Ajouter de nouvelles fonctionnalités ou services ne perturbe pas les services existants, rendant l’écosystème facilement évolutif.

Comment Fonctionne GraphQL Federation ?

GraphQL Federation fonctionne en unifiant les schémas de plusieurs services GraphQL. Chaque service définit ses types, requêtes, mutations et souscriptions, ainsi que les extensions des types définis par d’autres services. Un routeur rassemble ces définitions dans un schéma global, gérant les requêtes entrantes et déléguant les opérations aux services concernés.

Composants Clés

  • Services Fédérés : Ces sont les services GraphQL individuels qui exposent une partie du schéma global.
  • Routeur : Un serveur qui orchestre les requêtes entre le client et les services fédérés, construisant dynamiquement le schéma global.

Mise en Place de GraphQL Federation avec Apollo Federation

Apollo GraphQL

Apollo Federation est la solution la plus populaire pour mettre en œuvre GraphQL Federation. En voici les grandes lignes :

  1. Définir des Services Fédérés : Chaque service utilise la directive @key pour définir comment les objets peuvent être résolus à travers le schéma global.
  2. Configuration du routeur : Le routeur Apollo utilise les configurations des services fédérés pour construire le schéma global.
  3. Exécution des Requêtes : Les clients envoient des requêtes au routeur, qui les décompose et les envoie aux services appropriés.

2. Schema Stitching

Le Schema Stitching consiste à configurer une API Gateway de manière à définir le Supergraph. Ainsi, l’API Gateway est responsable de la définition des relations qui existent entre les différents services, et de l’acheminement des requêtes aux bons services.

Chaque service est indépendant, et peut être greffé au Supergraph sans modification (hors potentiels conflits de nommage).

Principes Fondamentaux

  • Combinaison de Schémas : Fusionner des schémas et des résolveurs provenant de différentes sources.
  • Délégation de Requêtes : Rediriger des requêtes d’un service à un autre, permettant une gestion transparente des données à travers des sources multiples.
  • Extensions de Schémas : Ajouter des champs à des types dans un schéma existant pour créer des relations entre des données provenant de différentes sources.

Comment Fonctionne le Schema Stitching?

Le processus commence par la définition des schémas individuels que vous souhaitez fusionner. Ensuite, à l’aide d’un outil ou d’une bibliothèque de stitching, vous combinez ces schémas en définissant des règles de fusion, des délégations de requêtes, et des extensions de types. Le résultat est un schéma global qui offre un point d’accès unique aux données de tous les schémas sources.

Étapes Clés de Mise en Œuvre

  1. Définition des Schémas Sources : Identifier les schémas GraphQL que vous souhaitez fusionner.
  2. Combinaison des Schémas : Utiliser une bibliothèque de stitching pour combiner les schémas et les résolveurs.
  3. Délégation de Requêtes : Configurer la délégation pour permettre aux résolveurs de transmettre les requêtes aux schémas appropriés.
  4. Extensions de Schémas : Étendre les types de schémas pour intégrer des champs qui relient les données entre les services.

GraphQL Tools

GraphQL Tools est une suite d’utilitaires Javascript qui fournit des fonctionnalités complètes pour le stitching de schémas. Ainsi, cette solution permet de développer une API Gateway totalement personnalisable, en bénéficiant d’outils puissants simplifiant la mise en œuvre du Schema Stitching

Avantages du Schema Stitching

  • Intégration de Sources de Données Hétérogènes : Le stitching facilite l’intégration de données provenant de différentes bases de données, APIs REST, ou services GraphQL.
  • Flexibilité : Les développeurs peuvent ajouter, modifier ou supprimer des services sources sans interrompre le service global.
  • Développement Indépendant : Les équipes peuvent travailler sur différents services GraphQL en parallèle, réduisant les goulots d’étranglement du développement.

Conclusion

L’unification d’APIs GraphQL représente une évolution majeure dans la manière dont les développeurs abordent l’architecture des systèmes. Ainsi, cette approche offre une solution élégante et puissante pour surmonter les défis posés par des architectures toujours plus complexes. En centralisant l’accès aux données, les Supergraphs améliorent la performance, mais facilitent également la maintenance et l’évolution des systèmes.

L’adoption d’un Supergraph favorise une meilleure collaboration entre les équipes, réduit les redondances et optimise les ressources. Ainsi, elle permet une réutilisation et une gouvernance des données à travers l’entreprise. De plus, elle prépare le terrain pour une innovation continue en rendant l’ajout de nouvelles fonctionnalités plus rapide et moins coûteux.

Toutefois, la mise en œuvre d’un Supergraph requiert une compréhension approfondie de GraphQL, ainsi qu’une planification et une conception soignées. Les organisations doivent évaluer attentivement leurs options, pour s’assurer que leur Supergraph répond à leurs besoins spécifiques.

Être capable de s’adapter aux exigences changeantes du marché est un atour majeur pour les entreprises. Ainsi, un Supergraph offre une solution efficace permettant de créer une fondation solide pour l’avenir. Aujourd’hui, l’unification des APIs GraphQL avec un Supergraph n’est pas juste une question d’optimisation, mais une stratégie pour rester compétitif.