GraphQL - Présentation

GraphQL est une technologie open source côté serveur qui a été développée par Facebook pour optimiser les appels d'API RESTful. C'est un moteur d'exécution et un langage de requête de données. Dans ce chapitre, nous discutons des avantages de l'utilisation de GraphQL.

Pourquoi GraphQL

Les API RESTful suivent une approche claire et bien structurée axée sur les ressources. Cependant, lorsque les données deviennent plus complexes, les itinéraires s'allongent. Parfois, il n'est pas possible de récupérer des données avec une seule requête. C'est là que GraphQL est utile. GraphQL structure les données sous la forme d'un graphe avec sa puissante syntaxe de requête pour parcourir, récupérer et modifier les données.

Voici les avantages de l'utilisation du langage de requête GraphQL -

Demandez ce que vous voulez et obtenez-le

Envoyez une requête GraphQL à votre API et obtenez exactement ce dont vous avez besoin. Les requêtes GraphQL renvoient toujours des résultats prévisibles. Les applications utilisant GraphQL sont rapides et stables. Contrairement aux services Restful, ces applications peuvent restreindre les données qui doivent être extraites du serveur.

L'exemple suivant vous aidera à mieux comprendre cela -

Considérons un objet métier Student avec les attributs id, firstName, lastName et collegeName . Supposons qu'une application mobile ait besoin de récupérer uniquement le prénom et l' ID . Si nous concevons un point de terminaison REST tel que / api / v1 / Students , il finira par récupérer les données pour tous les champs d'un objet étudiant . Cela signifie que les données sont surexplorées par le service RESTful. Ce problème peut être résolu en utilisant GraphQL.

Considérez la requête GraphQL donnée ci-dessous -

{
   students {
      id
      firstName
   }
}

Cela renverra des valeurs uniquement pour les champs id et firstname. La requête ne récupérera pas les valeurs des autres attributs de l'objet étudiant. La réponse à la requête illustrée ci-dessus est la suivante:

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim"
         },
         {
            "id": "S1002",
            "firstName": "Kannan"
         }
      ]
   }
}

Obtenez de nombreuses ressources en une seule demande

Les requêtes GraphQL aident à récupérer en douceur les objets métier associés, tandis que les API REST classiques nécessitent un chargement à partir de plusieurs URL. Les API GraphQL récupèrent toutes les données dont votre application a besoin en une seule requête. Les applications utilisant GraphQL peuvent être rapides même sur des connexions de réseau mobile lentes.

Considérons un autre objet métier, College, qui a les attributs: nom et emplacement. L' objet métier Student a une relation d'association avec l'objet College. Si nous devions utiliser une API REST pour récupérer les détails des étudiants et de leur collège, nous finirions par faire deux requêtes au serveur comme / api / v1 / étudiants et / api / v1 / colleges . Cela entraînera une sous-extraction des données à chaque demande. Les applications mobiles sont donc obligées de passer plusieurs appels vers le serveur pour obtenir les données souhaitées.

Cependant, l'application mobile peut récupérer les détails des objets Student et College en une seule requête à l'aide de GraphQL.

Ce qui suit est une requête GraphQL pour récupérer des données -

{
   students{
      id
      firstName
      lastName
      college{
         name
         location
      }
   }
}

La sortie de la requête ci-dessus contient exactement les champs que nous avons demandés comme indiqué ci-dessous -

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim",
            "lastName": "Mohammad",
            "college": {
               "name": "CUSAT",
               "location": "Kerala"
            }
         },
         
         {
            "id": "S1002",
            "firstName": "Kannan",
            "lastName": "Sudhakaran",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         },
         
         {
            "id": "S1003",
            "firstName": "Kiran",
            "lastName": "Panigrahi",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         }
      ]
   }
}

Décrivez ce qui est possible avec un système de typage

GraphQL est fortement typé et les requêtes sont basées sur des champs et leurs types de données associés. En cas de non-concordance de type dans une requête GraphQL, les applications serveur renvoient des messages d'erreur clairs et utiles. Cela permet un débogage fluide et une détection facile des bogues par les applications clientes. GraphQL fournit également des bibliothèques côté client qui peuvent aider à réduire la conversion et l'analyse de données explicites.

Un exemple des types de données Étudiant et Collège est donné ci-dessous -

type Query {
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}

type College {
   id:ID!
   name:String
   location:String
   rating:Float
   students:[Student]
}

Passez plus vite avec de puissants outils de développement

GraphQL fournit des outils de développement riches pour la documentation et le test des requêtes. GraphiQL est un excellent outil qui génère de la documentation sur la requête et son schéma. Il fournit également un éditeur de requêtes pour tester les API GraphQL et une capacité de complétion de code intelligente lors de la création de requêtes.