Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
João Inez

Min Read

21 février 2024

Comparaison entre GraphQL et REST : choisir la bonne API

Lorsque vous aurez besoin de créer une API, votre esprit se tournera probablement vers REPOS, le de facto standard pour la création d'API. Cependant, cette situation est en train de changer avec l'augmentation de GraphQL popularité.

Tout le monde ne comprend pas parfaitement ce qu'est GraphQL ni pourquoi il est déclaré successeur de REST. C'est précisément ce que je vais clarifier dans cet article. Ici, je vais me montrer Principales fonctionnalités de GraphQL et ses avantages par rapport à REST, en soulignant quelques points sur lesquels les deux diffèrent.

L'objectif est de fournir une brève explication à tous ceux qui ne connaissent pas encore GraphQL, de clarifier ce qu'il fait mieux que REST pour ceux qui sont encore sceptiques quant à cette technologie, et dans quels cas nous devrions utiliser GraphQL ou REST.

blue arrow to the left
Imaginary Cloud logo

Qu'est-ce que GraphQL ?

GraphQL est un langage de requête pour les API qui permet la récupération déclarative des données afin de donner au client le pouvoir de spécifier exactement les données dont l'API a besoin. Cela facilite l'évolution des API au fil du temps.

Maintenant que nous savons ce qu'est GraphQL, je tiens à clarifier ce qu'il n'est pas, car je pense qu'il y a encore une certaine confusion à ce sujet.

Tout d'abord, cela n'a rien à voir avec les bases de données. Ce n'est pas une alternative à SQL ou à un tout nouvel ORM.

Deuxièmement, il ne s'agit pas d'un remplacement REST, mais c'est une alternative. Vous n'avez pas à choisir entre l'un et l'autre, ils peuvent coexister avec bonheur dans le même projet.

Enfin et surtout, GraphQL n'est ni compliqué ni effrayant. Il est assez facile de comprendre son caractère déclaratif et de comprendre exactement comment il est possible d'en tirer le meilleur parti.

Qui a créé GraphQL

GraphQL a été développé en interne par Facebook en 2012 avant d'être open source en 2015, et sa version stable n'a été publiée qu'en juin 2018. Le 7 novembre 2018, le projet GraphQL a été transféré de Facebook à la toute nouvelle GraphQL Foundation, hébergée par la Linux Foundation, une organisation à but non lucratif.

Lee Byron, le créateur de GraphQL, vise à rendre GraphQL omniprésent sur les plateformes Web.

Quelles entreprises utilisent GraphQL

GraphQL est utilisé par équipes de toutes tailles, dans de nombreux environnements et langues différents. Les principales entreprises qui utilisent GraphQL sont Facebook, Github, Pinterest et Shopify.

GraphQL en contexte

Avant de passer à la comparaison avec REST, je vais passer en revue une simple requête GraphQL où nous pouvons récupérer un utilisateur ainsi que son nom et son âge :


Et la réponse JSON que nous en obtiendrons :


Comme je l'ai indiqué précédemment, la nature déclarative de GraphQL permet de comprendre incroyablement facilement ce qui se passe à tout moment, car nous écrivons essentiellement JSON objets sans valeurs.

blue arrow to the left
Imaginary Cloud logo

Qu'est-ce que REST ?

REST a été défini par Roy Fielding, un informaticien qui a présenté les principes REST dans son Thèse de doctorat en 2000.

REST (Representational State Transfer) est un style architectural logiciel qui définit un ensemble de contraintes qui font de tout service Web une véritable API RESTful. Les contraintes REST sont les suivantes :

Architecture client-serveur

L'architecture client-serveur signifie que les problèmes d'interface utilisateur doivent être séparés des problèmes de stockage des données afin d'améliorer la portabilité des interfaces utilisateur sur plusieurs plateformes.

Client-Server Architecture | REST

Apatride

Un serveur sans état ne conserve aucune information concernant l'utilisateur qui utilise l'API. Cela signifie que le serveur ne se souvient pas si l'utilisateur envoie sa première demande ou non.

Client-Stateless-Server | REST

Possibilité de mise en cache

Les réponses de l'API REST doivent se définir comme pouvant être mises en cache ou non afin d'empêcher les clients de fournir des données inappropriées susceptibles d'être utilisées lors de futures demandes.

Système en couches

Un système en couches signifie que si un mandataire ou équilibreur de charge est placé entre le client et le serveur, les connexions entre eux ne devraient pas être affectées et le client ne savait pas s'il était connecté au serveur final ou non.

Interface uniforme

Une interface uniforme suggère qu'il doit s'agir d'une manière uniforme d'interagir avec un serveur donné quel que soit le type d'appareil ou d'application (site Web, application mobile). La principale directive est que chaque ressource doit être identifiée sur demande.

Style architectural REST

Compte tenu de toutes les contraintes REST, l'image suivante illustre le style architectural REST :

REST Architectural Style
Source : Développement de mashups pour les réseaux sociaux : aperçu des API basées sur REST | Procedia Technology
blue arrow to the left
Imaginary Cloud logo

Pourquoi GraphQL a-t-il été créé s'il existe déjà REST

Il y a deux raisons principales pour lesquelles des entreprises telles que Facebook, Netflix et Coursera a commencé à développer des alternatives à REST :

1. Au début des années 2010, l'utilisation de la téléphonie mobile a connu un essor, ce qui a entraîné certains problèmes liés aux appareils à faible consommation et à la lenteur des réseaux. REST n'est pas la solution optimale pour résoudre ces problèmes ;

2. À mesure que l'utilisation des appareils mobiles augmentait, le nombre de frameworks et de plates-formes frontaux différents qui exécutent des applications clientes augmentait également. Étant donné la rigidité de REST, il était plus difficile de développer une API unique capable de répondre aux exigences de chaque client.

Si nous allons encore plus loin, nous nous rendons compte que la principale raison pour laquelle une solution alternative a été identifiée est que la plupart des données utilisées dans les applications Web et mobiles modernes ont la forme d'un graphique. Par exemple, les articles d'actualité contiennent des commentaires, et ces commentaires peuvent comporter des fonctionnalités telles que des likes ou des drapeaux de spam, qui sont créés ou signalés par les utilisateurs. Cet exemple décrit à quoi ressemble un graphique.

En conséquence, Facebook a commencé à développer GraphQL. Dans le même temps, Netflix et Coursera travaillaient également eux-mêmes sur des alternatives. Après l'open source GraphQL de Facebook, Coursera a abandonné ses efforts et a adopté la nouvelle technologie. Netflix a toutefois continué à développer sa propre alternative REST, puis open source Falcor.

Architecture GraphQL

Dans les sections suivantes, j'expliquerai pourquoi GraphQL offre plus de flexibilité que REST, mais examinons d'abord son architecture.

GraphQL Architecture
blue arrow to the left
Imaginary Cloud logo

Est-ce que GraphQL est meilleur que REST ?

Est-ce que GraphQL est meilleur que REST ? GraphQL fournit un langage de requête qui permet aux clients de demander uniquement les données dont ils ont besoin et permet des mises à jour en temps réel. REST repose sur des points de terminaison et des structures de données rigides. La « meilleure » qualité de GraphQL dépend des exigences spécifiques et de la flexibilité requises dans un projet piloté par API.

Dans cette section, je vais passer en revue point par point un exemple pratique, comparaison de REST à GraphQL afin de démontrer la flexibilité du langage de requête de Facebook.

Imaginez que vous avez un bloguer, et vous voulez que la page d'accueil affiche tous les derniers articles. Pour ce faire, vous devez récupérer les messages, vous allez donc probablement faire quelque chose comme ceci :

OBTENIR /api/posts


Mais que faire si vous voulez aussi voir l'auteur ? Pour y parvenir, trois options s'offrent à vous :

  • Récupérez les auteurs à partir d'une autre ressource :


  • Modifiez la ressource pour renvoyer également l'auteur :


  • Créez une ressource qui renvoie les publications avec l'auteur :


Chacune de ces approches créera un problème qui lui est propre, alors examinons-les une par une pour voir comment GraphQL est capable de résoudre les problèmes suivants.

Sous-titrage

Avec la première approche, qui consiste à récupérer les auteurs à partir d'une autre ressource, vous vous retrouverez avec deux requêtes de serveur au lieu d'une, et à mesure que vous continuez à évoluer, vous pourriez avoir encore plus de requêtes vers différents points de terminaison afin de récupérer toutes les données nécessaires.

Avec GraphQL, cela ne se produirait pas. Tu n'aurais fait que une seule demande, et vous n'aurez pas à effectuer plusieurs allers-retours vers le serveur, comme indiqué ci-dessous :


Excès de prix

En regardant la deuxième approche, qui consiste à modifier la ressource pour renvoyer également l'auteur, vous pouvez voir qu'elle a assez bien résolu le problème. Toutefois, la modification d'une ressource peut avoir un effet secondaire sur d'autres aspects de votre application. Plus précisément, trop farfelu.

Revenons à votre blog, mais cette fois, vous avez également une barre latérale affichant les meilleurs articles mensuels avec leurs titres, leurs sous-titres et leur date, qui utilisent la ressource /api/articles. Puisque vous avez modifié la ressource, elle affiche désormais également l'auteur. Cependant, nous n'en avons pas besoin pour la barre latérale.

Bien que cela ne semble pas être un problème, pour les utilisateurs disposant de forfaits de données limités, il n'est pas idéal qu'un site Web récupère des données inutiles. Depuis GraphQL permet au client de récupérer uniquement les données nécessaires, ce problème n'existerait pas :


Développement frontal lent

Enfin, examinons la dernière approche, qui consiste à créer une ressource qui renvoie les articles avec l'auteur, car il s'agit d'un modèle courant pour structurer les points de terminaison en fonction des vues de votre projet.

Bien que cela puisse résoudre des problèmes tels que celui décrit ci-dessus, cela ralentit également développement front-end, car chaque vue spécifique nécessite son point de terminaison spécifique. Si, à tout moment, une vue a besoin de nouvelles données, le développement doit ralentir jusqu'à ce que le point de terminaison soit mis à jour.

Encore une fois, puisque GraphQL donne au client le pouvoir de récupérer uniquement les données nécessaires, rien ne ralentit, car il est très simple d'ajouter un nouveau champ.

Vous obtiendriez à partir de là :


À cela :


New call-to-action
blue arrow to the left
Imaginary Cloud logo

Comparaison entre GraphQL et REST

Différences

Récapitulons brièvement les différences entre REST et GraphQL :

  • GraphQL est un langage et un ensemble d'outils qui utilisent HTTP pour travailler sur points de terminaison uniques afin de optimiser la flexibilité et les performances.
  • Dans GraphQL, les données sont organisées dans un graphique et les objets sont structurés par des nœuds suivant un schéma.
  • REST est un concept architectural pour les logiciels basés sur le réseau qui a généralement été utilisé pour développer de nouvelles API.
  • GraphQL résout à la fois les problèmes de lecture excessive et insuffisante en permettant au client de demander uniquement les données nécessaires ;
  • Étant donné que le client dispose désormais d'une plus grande liberté dans les données récupérées, le développement est beaucoup plus rapide avec GraphQL par rapport à ce que ce serait avec REST.
  • Dans GraphQL, l'identité d'un objet est séparée de la manière dont un développeur le récupère. Dans REST, le point de terminaison est l'identité d'un objet.
  • Dans GraphQL, le serveur détermine les ressources disponibles en permettant au client de demander les données nécessaires à un moment précis. Dans REST, la taille des ressources est définie par le serveur.
  • Dans GraphQL, un une seule requête peut appeler différents résolveurs pour apporter une réponse à l'aide de multiples ressources. Dans REST, une requête appelle généralement une fonction de gestionnaire de route.
  • Comme GraphQL suit les relations définies dans le schéma, il est possible de passer du point d'entrée aux données associées en une seule requête. Au contraire, REST nécessite l'appel de plusieurs points de terminaison pour récupérer les ressources associées.

Similitudes

Comme indiqué précédemment, GraphQL ne remplace pas REST. Malgré leurs différences, GraphQL et REST présentent également des similitudes :

  • Ils peuvent tous les deux être récupérés par un HTTP OBTENIRdemande avec une URL et renvoie la demande sous forme de données JSON.
  • GraphQL et REST permettent de spécifier des identifiants pour les ressources.
  • GraphQL (champs) et REST (points de terminaison) appellent des fonctions sur le serveur.
  • Ils ont tous deux des points d'entrée dans les données. Dans l'API GraphQL, la liste des champs (en tenant compte à la fois de Mutationet le Requête types) est identique à la liste des points de terminaison d'un API REST.
  • GraphQL et REST sont capables de distinguer quand une API est destinée à écrire ou à lire des données.
blue arrow to the left
Imaginary Cloud logo

À quoi sert GraphQL

De nos jours, presque toutes les entreprises ont pour objectif de créer des applications mobiles multiplateformes, car l'interaction du client avec le produit augmente considérablement s'il peut y accéder via son téléphone. Lorsque vous utilisez une application mobile, vous vous attendez à ce qu'elle soit réactive et présente une faible latence.

En utilisant GraphQL, vous pourrez atteindre ces objectifs de manière très simple. Il aide le client à récupérer la quantité de données nécessaire pour afficher une vue spécifique.

blue arrow to the left
Imaginary Cloud logo

À quoi sert REST

Jusqu'à présent, j'imagine que nous partageons la même opinion selon laquelle GraphQL est génial, mais ce n'est pas tout à fait vrai. Il manque encore quelques éléments pour le rendre parfait. Si vous souhaitez intégrer l'un des points suivants de votre projet, vous devriez envisager d'utiliser REST.

Mécanisme de mise en cache HTTP inexistant

De nos jours, chaque navigateur fournit une implémentation d'un cache HTTP pour éviter facilement de récupérer des ressources et pour identifier si deux ressources sont identiques.

Lorsque vous utilisez GraphQL, il n'est pas possible d'obtenir un identifiant global unique pour un objet donné car nous utilisons la même URL pour toutes les requêtes. Pour avoir du cache sur GraphQL, vous devez configurer votre propre cache.

Surveillance et signalement des erreurs

Lorsque vous utilisez REST, vous pouvez créer un système de surveillance basé sur les réponses de l'API. Sur GraphQL, vous n'avez pas cela, car il renvoie toujours 200 OK réponse d'état. Une erreur GraphQL typique ressemble à ceci :


En regardant cette réponse, vous pouvez constater qu'il est très difficile de gérer et de surveiller les différents scénarios d'erreur.

Attaques liées aux ressources

Comme vous le savez maintenant, avec GraphQL, vous pouvez interroger exactement ce que vous voulez quand vous le souhaitez, mais nous devons être conscients que cela entraîne des implications complexes en matière de sécurité. Si un acteur malveillant tente de soumettre une requête imbriquée coûteuse pour surcharger votre serveur ou votre base de données et que votre serveur ne dispose pas des protections appropriées, vous serez vulnérable à DDoS (attaque par déni de service) attaques.

blue arrow to the left
Imaginary Cloud logo

Présentation des fonctionnalités de GraphQL

Maintenant que nous savons comment il se compare à REST, parlons de certaines des fonctionnalités propres à GraphQL.

Schéma et système de types

GraphQL utilise son propre système de types pour définir le schéma d'une API, avec sa syntaxe appelée Langage de définition de schéma (SDL). Le schéma sert de contrat entre le serveur et le client pour définir la manière dont un client peut accéder aux données.

Une fois le schéma défini, le front-end et back-end les équipes peuvent travailler de manière indépendante, car le front-end peut être facilement testé à l'aide de données fictives. Le front-end peut également obtenir des informations utiles à partir du schéma, telles que ses types, ses requêtes et ses mutations en utilisant GraphiQL ou introspection. Le Le schéma de GraphQL assure également la sécurité des types, ce qui est un avantage pour le développement front-end et back-end, car il détecte les erreurs de type à un stade précoce.

Exemple de schéma :

IDE GraphQL

GraphQL IDE est l'une des fonctionnalités les plus utiles du développement GraphQL. Il tire parti de sa nature auto-documentée pour faciliter le développement.

À l'aide de GraphiQL ou Terrain de jeu GraphQL, vous pouvez simplement inspecter votre schéma et même exécuter des requêtes et des mutations pour tester votre API.

GraphQL Playground
blue arrow to the left
Imaginary Cloud logo

Conclure

GraphQL fournit un environnement de développement fluide et rapide avec sa nature déclarative et flexible, offrant de nombreuses améliorations par rapport à REST.

Il possède déjà une grande communauté et un écosystème dynamique, et a déjà été mis en œuvre en plusieurs langues populaires, tels que JavaScript, Allez-y et Java.

Bien que cet article ne fasse que plonger les orteils dans l'océan qu'est GraphQL, son site web contient une pléthore d'informations et constitue un endroit formidable pour apprendre et commencer à utiliser GraphQL.

Si vous souhaitez développer une API à utiliser sur une application mobile tu aurais dû GraphQL comme première option car l'utilisation de la bande passante est importante. Si votre l'application nécessite une API robuste, avec mise en cache et système de surveillance tu devrais opter pour REST.

Cela étant dit, ce n'est pas une technologie parfaite et elle présente tout de même quelques inconvénients par rapport à REST. Mais compte tenu de sa jeunesse, l'avenir s'annonce incroyablement prometteur pour GraphQL.

Join us and find out about our exciting projects!

Vous avez trouvé cet article utile ? Ceux-ci vous plairont peut-être aussi !

blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
João Inez
João Inez

Développeur Web, on trouve couramment qu'il tape null au lieu de nil. J'adore explorer le style fonctionnel de Javascript.

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon