Connexion / Inscription Account

API

GraphQL, qu'est-ce que c'est ?

GraphQL est un langage de requête et un environnement d'exécution côté serveur pour les interfaces de programmation d'application (API) qui s'attache à fournir aux clients uniquement les données qu'ils ont demandées, et rien de plus. 

GraphQL est conçu pour mettre à la disposition des développeurs des API rapides, flexibles et faciles à utiliser. Il est même possible de le déployer au sein d'un environnement de développement intégré (IDE), appelé GraphiQL. Utilisé à la place de REST, GraphQL permet aux développeurs de créer des requêtes qui extraient les données de plusieurs sources à l'aide d'un seul appel d'API. 

En outre, avec GraphQL, les équipes chargées de la maintenance des API peuvent librement ajouter ou retirer des champs sans perturber les requêtes existantes. De leur côté, les développeurs peuvent créer des API en utilisant les méthodes de leur choix. La spécification de GraphQL garantit que leur fonctionnement sera prévisible auprès des clients.

Schémas, résolveurs et autres termes courants liés à GraphQL

Les développeurs d'API utilisent GraphQL pour créer un schéma qui décrit toutes les données que les clients peuvent demander par l'intermédiaire de ce service. 

Un schéma GraphQL est constitué de types d'objets, qui définissent le genre d'objet qu'il est possible de demander et les champs qu'il contient. 

Lorsque les requêtes arrivent, GraphQL les compare au schéma,puis exécute celles qui ont été validées.

Le développeur de l'API associe chaque champ d'un schéma à une fonction nommée résolveur. Le résolveur est appelé pour produire une valeur au cours de l'exécution.

image

En dehors de la définition et de la validation de la syntaxe pour les requêtes d'API (décrites dans le référentielgraphql-spec), GraphQL laisse au concepteur de l'API la liberté de prendre la plupart des autres décisions. GraphQL n'impose pas de méthode de stockage des données ni de langage de programmation spécifique. Les développeurs peuvent utiliser PHP (graphql-php), Scala (Sangria), Python (Graphene Python), Ruby (graphql-ruby), JavaScript (graphql.js) et d'autres encore. Il n'impose pas non plus de contrainte au niveau du réseau, des autorisations ou de la pagination.

Du côté du client, les opérations GraphQL les plus courantes sont probablement les requêtes et les mutations. Si on les transpose dans le modèle CRUD (create, read, update and delete), une requête correspond à l'action read, c'est-à-dire « lire ». Toutes les autres actions (create, update et delete, ou créer, mettre à jour et supprimer) sont gérées par les mutations.

Avantages et inconvénients de GraphQL dans les environnements d'entreprise

Vous aimeriez essayer GraphQL dans un environnement métier ou d'entreprise ? Sachez qu'il présente à la fois des avantages et des inconvénients.

Avantages

  • Un schéma GraphQL définit une source unique de vérité dans une application GraphQL. Il permet à une entreprise de fédérer l'ensemble de son API.
  • Les appels GraphQL sont gérés par un seul aller-retour. Les clients obtiennent précisément ce qu'ils ont demandé, rien de plus.
  • Les types de données sont définis rigoureusement, ce qui limite les problèmes de communication entre le client et le serveur. 
  • GraphQL est introspectif. Un client peut demander une liste des types de données disponibles. Cette fonction est très utile pour la génération automatique de documents.
  • GraphQL permet de faire évoluer l'API d'une application sans dégrader les requêtes existantes.
  • Il existe de nombreuses extensions GraphQL Open Source qui proposent des fonctions indisponibles dans les API REST.
  • GraphQL n'impose aucune architecture d'application spécifique. Il peut être mis en œuvre sur une API REST existante et fonctionner avec les outils de gestion des API existants.

Inconvénients

  • Les développeurs qui travaillent habituellement avec des API REST devront apprendre à utiliser GraphQL.
  • GraphQL déplace l'essentiel de la charge de travail d'une requête de données du côté serveur, ce qui complique la tâche des développeurs serveur.
  • Selon la mise en œuvre, les stratégies de gestion des API nécessaires pour GraphQL peuvent différer de celles des API REST, notamment en matière de limites de débit et de tarifs.
  • La mise en cache est plus complexe qu'avec les API REST.
  • Les équipes chargées de la maintenance des API doivent écrire un schéma GraphQL supplémentaire compatible avec les opérations de maintenance.

Exemple de requête GraphQL

Les quelques exemples de requêtes et de réponses ci-dessous vous aideront à mieux comprendre le fonctionnement de GraphQL. Intéressons-nous à trois exemples tirés du site web du projet GraphQL (graphql.org).

Le premier exemple montre comment un client peut construire une requête GraphQL en demandant à une API de renvoyer des champs spécifiques au format spécifié.

{ me { name } }

Une API GraphQL renverra le résultat suivant au format JSON :

{ "me": { "name": "Dorothy" } }

Un client peut également ajouter des arguments dans une requête GraphQL, comme dans l'exemple ci-dessous :

{ human(id: "1000") { name location } }

Résultat :

{ "data": { "human": { "name": "Dorothy, "location": "Kansas" } } }

À partir de là, tout devient plus intéressant. GraphQL permet aux utilisateurs de définir des fragments réutilisables et d'assigner des variables.

Imaginez que vous devez demander une liste d'identifiants. Dans ce cas, demandez une série d'enregistrements pour chaque identifiant. Avec GraphQL, vous pouvez créer une requête qui extrait tous les éléments qui vous intéressent dans un seul appel d'API. 

Cette requête :

query HeroComparison($first: Int = 3) { leftComparison: hero(location: KANSAS) { ...comparisonFields } rightComparison: hero(location: OZ) { ...comparisonFields } } fragment comparisonFields on Character { name friendsConnection(first: $first) { totalCount edges { node { name } } } }


peut fournir le résultat suivant :

{ "data": { "leftComparison": { "name": "Dorothy", "friendsConnection": { "totalCount": 4, "edges": [ { "node": { "name": "Aunt Em" } }, { "node": { "name": "Uncle Henry" } }, { "node": { "name": "Toto" } } ] } }, "rightComparison": { "name": "Wizard", "friendsConnection": { "totalCount": 3, "edges": [ { "node": { "name": "Scarecrow" } }, { "node": { "name": "Tin Man" } }, { "node": { "name": "Lion" } } ] } } } } 

Si vous utilisez GitHub, vous pouvez rapidement tester GraphQL grâce à GraphQL Explorer pour GitHub.

GraphQL et l'Open Source

GraphQL a été développé par Facebook, qui a commencé à l'utiliser pour les applications mobiles en 2012. La spécification de GraphQL est devenue Open Source en 2015. Elle est désormais supervisée par la GraphQL Foundation.

Divers projets Open Source utilisent GraphQL. La liste fournie ci-dessous est non exhaustive, mais elle comprend les projets conçus pour faciliter l'adoption de GraphQL.

  • Apollo : plateforme GraphQL qui comprend une bibliothèque client front-end (Apollo Client) et une structure de serveur back-end (Apollo Server).
  • Offix : client hors ligne qui permet d'exécuter les mutations et requêtes GraphQL, même lorsqu'il est impossible de communiquer avec une application.
  • Graphback : client en ligne de commande qui s'utilise pour générer des serveurs Node.js compatibles avec GraphQL.
  • OpenAPI-to-GraphQL : interface en ligne de commande et bibliothèque pour traduire les API décrites par des spécifications OpenAPI ou Swagger dans le langage GraphQL.

Découvrez les produits Red Hat pour les API

Red Hat 3scale API Management

Plateforme de gestion des API.

Red Hat Fuse logo

Une plateforme d'intégration distribuée.