GraphQL : une alternative à REST sur HTTP

GraphQL : une alternative à REST sur HTTP

De nombreuses normes architecturales open source existent pour la création et la distribution d'applications. Les API REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) et GraphQL sont les plus populaires.





Les API RESTful sont la norme architecturale d'API la plus utilisée. Si vous avez écrit des API RESTful complexes avec de nombreux points de terminaison, vous avez probablement réalisé à quel point elles peuvent être compliquées. Cela est particulièrement vrai s'il n'y a que de légères différences entre les paramètres.





UTILISEZ LA VIDÉO DU JOUR

Vous pouvez également rencontrer des problèmes avec la récupération des données car les API RESTful ne sont pas assez flexibles pour sélectionner des données spécifiques. GraphQL résout ces problèmes des API RESTful.





Qu'est-ce que GraphQL ?

GraphQL (Graph Query Language) est un langage de requête et un environnement d'exécution pour la création d'API. Contrairement aux API REST avec de nombreux points de terminaison pour la consommation de données, les API GraphQL ont un point d'entrée. Vous pouvez récupérer des données spécifiques en les décrivant dans des requêtes.

La Spécification GraphQL définit le langage de requête et le fonctionnement des serveurs GraphQL. Vous pouvez créer et consommer des API GraphQL dans des langages côté serveur de Python à Javascript , et tout langage prenant en charge HTTP.



Meta a construit GraphQL en 2012 comme alternative à REST pour construire sur HTTP. Ils ont publié GraphQL en tant que norme open source en 2015. Aujourd'hui, la fondation GraphQL supervise le développement de la spécification GraphQL.

GraphQL est relativement nouveau, avec une faible adoption, et il y a des coûts cachés à son utilisation. La création d'API GraphQL peut être inutilement complexe, en particulier pour les petits projets avec quelques points de terminaison.





De plus, toutes les requêtes GraphQL finissent par renvoyer un code d'état de 200, quel que soit l'état de la requête.

Comment fonctionne GraphQL ?

  GraphQL's functions and syntax

Contrairement à REST, qui est orienté ressources , GraphQL nécessite que vous considériez les données comme un graphique pour interagir avec les données. Vous pouvez spécifier la structure des données et la spécification fournit une interface de requête robuste pour interagir avec l'API via HTTP. Vous pourrez utiliser diverses fonctionnalités en fonction du Package ou bibliothèque GraphQL vous choisissez d'utiliser.





Les schémas GraphQL incluent des types d'objet qui définissent l'objet de requête et ses champs disponibles. Sur les requêtes et mutations d'API, le package GraphQL valide les requêtes et exécute les requêtes en fonction des fonctions de gestionnaire spécifiées (résolveurs).

Pourquoi devriez-vous utiliser GraphQL ?

REST est une norme facile à utiliser et la plupart des langages de programmation disposent d'outils pour créer rapidement des API RESTful. Cependant, la création et la consommation d'API RESTful posent de nombreux problèmes.

Voici quelques-uns des problèmes avec REST qui font que les développeurs préfèrent GraphQL pour certains cas d'utilisation.

comment les comptes instagram sont piratés

Récupération de données inefficace

Les API RESTful relaient les données en fonction des spécifications du point de terminaison. Ils ne sont pas assez flexibles pour récupérer des données au-delà de ce qui est codé en dur dans la fonction de gestionnaire du point de terminaison.

Supposons qu'un point de terminaison renvoie une liste de données sur appel et que vous deviez spécifier des valeurs ou des critères pour les champs. Dans ce cas, le développeur doit créer un point de terminaison et définir la logique métier pour renvoyer les données. Vous pouvez analyser manuellement la précieuse ressource, ce qui prend finalement plus de temps.

GraphQL résout le problème de la récupération inefficace des données, car vous pouvez interroger les API pour renvoyer des données en fonction de critères et de spécifications de manière flexible.

Les API GraphQL sont interactives ; vous pouvez spécifier les données que vous devez récupérer dans une syntaxe simple et lisible.

{ 
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

La requête GraphQL ci-dessus interroge un utilisateur schéma pour les entrées où le âge champ est 89. La requête a une requête intégrée pour les entrées où le vivant le terrain évalue vrai . Il renvoie les champs name, bio et nationality du schéma.

Développement rapide

Construire et utiliser des API GraphQL est plus facile que d'utiliser REST, en particulier lorsque la taille du projet augmente. Au cours de la phase de développement, vous n'avez pas à développer autant de routes et de fonctions de gestionnaire que lors du développement d'API RESTful. Consommer des API GraphQL n'est pas aussi fastidieux que les API RESTful.

Dans REST, différents points de terminaison donnent accès à différentes ressources, contrairement à GraphQL, où il n'y a qu'un seul point de terminaison. Cela offre flexibilité et performances, et les requêtes peuvent appeler différentes fonctions de résolution.

Le langage de définition de schéma GraphQL

Le langage de définition de schéma GraphQL (SDL) spécifie les schémas des services GraphQL.

La syntaxe GraphQL SDL est facile à lire et à comprendre. Vous spécifierez la structure de votre schéma dans un fichier avec le .graphql ou .graphqls extension.

type Human { 
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

Le code GraphQL ci-dessus est le schéma d'une API GraphQL définissant la structure de l'API pour les requêtes. Le schéma définit la fonctionnalité CRUD pour l'API.

Côté client, en fonction de la structure du schéma et des données ou opérations du client, le client peut exécuter une requête (GET ou DELETE dans REST) ​​ou un mutation (PUT ou POST).

Voici un exemple d'interrogation du Humain schéma.

query Human { 
name
age
}

La requête ci-dessus renverrait le schéma humain Nom et âge données de terrain.

Les mutations GraphQL ont une syntaxe assez différente de celle des requêtes. Voici un exemple d'opération de mutation sur le Humain schéma.

mutation { 
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

Les entrées de code de mutation Nom et âge champs au client et renvoie les données des champs.

Vous aurez besoin d'un magasin de données pour la persistance lorsque vous créez votre API GraphQL. Comme REST et la plupart des architectures Web basées sur HTTP, GraphQL est sans état et vous pouvez utiliser n'importe quel magasin de données ou base de données pour votre application.

Construire une API GraphQL

  Langages pris en charge par GraphQL

GraphQL est une spécification et vous pouvez créer GraphQL dans les langages côté serveur les plus populaires. Vous devrez trouver une bibliothèque avec les fonctionnalités dont vous avez besoin pour votre projet.

Lorsque vous choisissez une bibliothèque GraphQL, vous souhaitez utiliser une bibliothèque riche en fonctionnalités qui prend en charge tous les types et opérations GraphQL. La plupart des bibliothèques adoptent soit une approche schéma d'abord, soit une approche code d'abord. Dans le premier cas, vous définissez un schéma GraphQL et la bibliothèque génère des résolveurs et du code passe-partout. Pour ce dernier, vous codez en dur les résolveurs sans définir de schéma.

GraphQL est de plus en plus adopté

Depuis la création de GraphQL, les développeurs et les entreprises ont publié des outils pour simplifier son utilisation. Ceux-ci peuvent réduire le temps de développement pour les petits et moyens projets.

Vous pouvez consulter les clients GraphQL open source, la documentation GraphQL et ses spécifications pour en savoir plus.