Qu’est ce que GraphQL

GraphQL_NodeJS

Créé en 2012 pour une utilisation en interne par Facebook puis rendu public en 2015. GraphQL est une spécification dont l'implémentation de référence est une librairie javascript : graphql-js.

La philosophie de GraphQL est de voir la donnée en tant que grappe d'objets plutôt que ressources, entités, identifiants.

Une requête GraphQL est une chaîne de caractères (ressemblant au format Json) qui définie la structure de la réponse (au format Json).

Les points importants sur GraphQL sont :

  • Format de données : la structure de la requête définie la structure de la réponse.
  • La hiérarchie : GraphQL suit les relations entre objets.
  • Fortement typé : chaque niveau de la requête correspond à un objet.
  • Le protocole : GraphQL permet d'agréger les données provenant de divers sources d'informations.
  • Introspection : un serveur GraphQL peut être interrogé sur les types d'objets qu'il supporte.
  • Non versionné : comme la structure de la réponse dépend de celle de la requête, il n'est pas nécessaire de versionner l'API. Chaque ajout sera disponible si la requête le demande. Chaque suppression entraîne une dépréciation de l'objet/attribut.

Voici un exemple d'une requête/réponse GraphQL s'appuyant sur les données de SWAPI (StarWars API).

{
  allFilms(first: 3) {
    films {
      title
      releaseDate
      planetConnection(first: 1) {
        planets {
          name
          climates
        }
      }
    }
  }
}
Requête : pour les 3 premiers films StarWars, afficher le titre, la date de sortie ainsi que le nom et le climat de la première planète visible
{
  "data": {
    "allFilms": {
      "films": [
        {
          "title": "A New Hope",
          "releaseDate": "1977-05-25",
          "planetConnection": {
            "planets": [
              {
                "name": "Tatooine",
                "climates": [
                  "arid"
                ]
              }
            ]
          }
        },
        {
          "title": "The Empire Strikes Back",
          "releaseDate": "1980-05-17",
          "planetConnection": {
            "planets": [
              {
                "name": "Hoth",
                "climates": [
                  "frozen"
                ]
              }
            ]
          }
        },
        {
          "title": "Return of the Jedi",
          "releaseDate": "1983-05-25",
          "planetConnection": {
            "planets": [
              {
                "name": "Tatooine",
                "climates": [
                  "arid"
                ]
              }
            ]
          }
        }
      ]
    }
  }
}
Réponse

Voici le site SWAPI GraphQL qui vous permettra de vous faire la main sur la syntaxe GraphQL.

Vous n'avez plus qu'à vous lancer.

 

Un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.