Jump to section

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

Copier l'URL

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.

Les développeurs d'API utilisent GraphQL pour créer un schéma qui liste 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.

API GraphQL

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érentiel graphql-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.

Essai gratuit

Essayer Red Hat OpenShift API Management

Bénéficiez d'un essai de 60 jours en libre-service pour explorer les avantages d'un service d'API entièrement géré.

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 de GraphQL

  • 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 de GraphQL

  • 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 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 dans un 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 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.

Les API : lectures recommandées

Fiche technique

Services Red Hat API Open Source pour la banque de détail

Livre numérique

Service Mesh ou gestion des API ?

Pour aller plus loin

Article

Une API, qu'est-ce que c'est ?

Une API, ou interface de programmation d'application, est un ensemble de définitions et de protocoles qui facilite la création et l'intégration de logiciels d'applications.

Article

Quel est le rôle d'une passerelle d'API ?

Une passerelle d'API est un outil de gestion des interfaces de programmation d'application (API) qui se positionne entre un client et une collection de services back-end.

Article

Red Hat, un partenaire de choix en matière d'API

Nos solutions d'API privilégient la réutilisation ainsi que l'agilité informatique. Elles incluent une interface de gestion qui vous aide à analyser, surveiller et faire évoluer votre environnement.

Illustration - mail

Ce type de contenu vous intéresse ?

Inscrivez-vous à notre newsletter Red Hat Shares.