GraphQL vs REST : tout ce que vous devez savoir

Publié: 2022-09-20

Il peut être difficile de choisir les technologies qui seront incluses dans la pile technologique de votre prochain projet. Dans de nombreux cas, et en particulier lorsqu'il s'agit de choisir entre les API GraphQL et RESTful, il s'agit de choisir la prochaine meilleure architecture de conception d'API.

Il existe quatre manières importantes de créer des API : SOAP, GRPC, REST et GraphQL. Nous nous concentrons souvent sur REST et GraphQL chaque fois que nous voulons créer des API. En effet, REST a changé les méthodes traditionnelles de création d'API avec SOAP et GRPC.

GraphQL est largement étiqueté comme un meilleur REST car il représente un meilleur moyen de créer des API. De nombreux développeurs pensent que GraphQL remplacera REST. Beaucoup d'autres ont déjà découvert que GraphQL aide à résoudre certains défis courants auxquels les développeurs sont confrontés lors de la création d'API REST.

Découvrez comment choisir la meilleure architecture et le meilleur modèle de conception d'API pour votre projet dans ce guide Cliquez pour tweeter

Ces deux méthodes de création d'API sont totalement différentes. En pratique, ces technologies fonctionnent en envoyant une requête HTTP et en recevant le résultat. Ils ont tous deux leurs avantages et leurs inconvénients, et dans cet article, nous discuterons en détail de ces deux grandes technologies qui ont changé la façon dont nous développons et mettons à l'échelle les API.

Avant de plonger dans les détails, explorons d'abord la signification des API GraphQL et RESTful.

Qu'est-ce que GraphQL ?

GraphQL est un langage de requête API ainsi qu'un runtime pour répondre à ces requêtes avec des données existantes. Il est également équipé d'outils puissants pour traiter même les requêtes les plus complexes.

La caractéristique centrale de GraphQL est sa capacité à demander et à recevoir uniquement les données spécifiques demandées, rien de plus. Cela simplifie beaucoup la mise à l'échelle de vos API avec votre application.

La partie la plus excitante de GraphQL est sa capacité à vous fournir toutes les données en un seul point de terminaison.

Une capture d'écran d'un organigramme d'architecture d'API GraphQL.
Architecture de l'API GraphQL.

Le diagramme ci-dessus est une représentation typique de l'architecture GraphQL. Les clients font des demandes à partir de différents appareils, et GraphQL gère leurs demandes et ne renvoie que les données demandées. Cela résout parfaitement le problème de la sur-extraction et de la sous-extraction dans les API RESTful.

Une capture d'écran d'un terrain de jeu GraphQL montrant une requête réussie.
Une requête réussie dans un terrain de jeu GraphQL.

Dans l'exemple ci-dessus, nous montrons un terrain de jeu GraphQL et comment vous pouvez interroger des données avec un seul point de terminaison. En haut se trouve le point de terminaison de l'API, à gauche se trouve la requête qui demande les noms des continents, et enfin, à droite, nous répondons à la requête que nous avons demandée.

GraphQL a été créé par Facebook dans le but principal de résoudre l'expérience de leur développeur d'applications mobiles tout en travaillant avec les API REST. Depuis la sortie de sa première version open source en 2015, GraphQL a connu une croissance phénoménale en raison de l'adoption de la technologie par de grands acteurs du secteur technologique.

Entreprises utilisant GraphQL

Vous trouverez ci-dessous une liste de quelques-unes des entreprises et applications utilisant activement GraphQL sur leurs serveurs.

Facebook

Facebook a créé GraphQL, et ils l'utilisent en production pour alimenter leurs applications mobiles depuis 2012. La société de réseau social de plusieurs milliards de dollars a ouvert la spécification GraphQL en 2015, la rendant accessible dans de nombreux environnements et à des équipes de toutes tailles. .

Une capture d'écran de la page de connexion Facebook.
Facebook utilise GraphQL.

GitHub

GitHub annonce également l'utilisation de GraphQL en fournissant une API GraphQL pour créer des intégrations, récupérer des données et automatiser vos flux de travail à l'aide de l'API GitHub GraphQL. L'API GitHub GraphQL offre des requêtes plus précises et flexibles que l'API GitHub REST.

Une capture d'écran de la page d'accueil de GitHub.
GitHub utilise également GraphQL.

Pinterest

Pinterest est également l'un des premiers à adopter GraphQL. Le géant du partage de photos a publiquement discuté de ses premières explorations de GraphQL et de la manière dont il utilise la technologie GraphQL qui alimente son entreprise d'un milliard de dollars.

Une capture d'écran de la page d'accueil de Pinterest.
Pinterest utilise également GraphQL pour son site.

De nombreuses autres entreprises d'un milliard de dollars telles que Intuit, Shopify, Coursera et Airbnb alimentent leurs applications avec GraphQL. Et cette préférence généralisée pour REST ne fait que croître.

Qu'est-ce que l'API RESTful ?

REST signifie «Representational State Transfer», qui est un style d'architecture logicielle pour les systèmes hypermédias distribués. Il définit les principes et les contraintes d'échange de ressources entre le serveur et les clients.

Si ces principes sont suivis dans une API, l'application de cette API est appelée « RESTful ». L'API WordPress REST en est un excellent exemple.

Vous trouverez ci-dessous quelques-uns des principes et contraintes qu'une API doit satisfaire pour être qualifiée d'API Restful :

  • Découplage client-serveur : les clients (frontend) et le serveur (backend) sont complètement séparés et ne peuvent communiquer que via les points de terminaison.
  • Interface uniforme : les données affichées dans l'interface sont identiques sur tous les appareils.
  • Apatridie : Le serveur ne se souvient pas si la demande en cours est faite pour la première fois ou non. Chaque fois qu'une demande est faite, elle doit inclure toutes les informations nécessaires pour la traiter à partir de zéro.
  • Cacheabilité : la mise en cache et le stockage de session sont autorisés, mais ils doivent être configurés pour permettre aux utilisateurs finaux de désactiver la mise en cache des données.
  • Architecture système en couches : les API doivent être conçues de manière à ce que ni le client ni le serveur ne puissent dire s'ils communiquent directement ou via un intermédiaire.

Le schéma ci-dessous représente l'architecture REST de base. Il montre comment les demandes et les réponses sont généralement traitées.

Une capture d'écran montrant un diagramme de branche de l'architecture de l'API RESTful.
Architecture API REST.

Avantages de GraphQL

Vous trouverez ci-dessous quelques avantages de l'utilisation de GraphQL, qui illustrent pourquoi il est plus que suffisant pour créer la prochaine application d'un milliard de dollars.

Récupération de données via un point de terminaison d'API unique

Le principal avantage de GraphQL est sa capacité à accéder à tout ou partie des points de données via un seul point de terminaison API.

L'un des problèmes les plus courants avec les API RESTful est d'avoir trop de points de terminaison pour accéder aux informations. Dans GraphQL, vous n'avez qu'un seul point de terminaison, vous n'avez donc pas besoin d'envoyer plusieurs requêtes pour récupérer différentes informations sur un objet.

Le diagramme ci-dessous illustre un exemple clair de récupération de ressources à l'aide de l'API RESTful et de GraphQL. Vous pouvez voir qu'il n'y a qu'un seul point de terminaison pour accéder à la ressource dans le serveur GraphQL, tandis que plusieurs points de terminaison d'API sont nécessaires pour accéder à différentes ressources dans l'API RESTful.

Un organigramme illustrant plusieurs requêtes dans l'API RESTful et comment elles sont gérées dans GraphQL.
Points de terminaison API dans REST et GraphQL.

Pas de sur-extraction ou de sous-extraction

Le problème de sur-récupération ou de sous-récupération est un problème connu avec les API RESTful. C'est lorsque les clients téléchargent des données en atteignant des points de terminaison qui renvoient des structures de données fixes, ou bien ils récupèrent plus ou moins que ce qu'ils attendaient.

La surrécupération fait que la requête reçoit (ou « récupère ») plus de données que ce qui est requis par une requête donnée. Imaginez que vous récupérez tous les utilisateurs d'un tableau avec l'intention d'afficher leurs noms d'utilisateur sur votre page d'accueil. Dans ce cas, la surrécupération renverra toutes les données sur chaque utilisateur, y compris (mais pas seulement) le nom.

La sous-extraction est relativement rare, mais elle se produit lorsque le point de terminaison spécifique ne parvient pas à fournir toutes les informations demandées. Le client devra faire des demandes supplémentaires pour accéder aux autres informations au besoin.

GraphQL résout efficacement le problème de sur-extraction ou de sous-extraction en saisissant la ressource exacte demandée par le client sans aucun détail supplémentaire.

Meilleure gestion des systèmes complexes et des microservices

GraphQL peut unifier et masquer la complexité de plusieurs systèmes intégrés.

Par exemple, supposons que nous souhaitions migrer d'une application backend monolithique vers une architecture de microservices. L'API GraphQL aide à gérer la communication entre divers microservices en les fusionnant en un seul schéma GraphQL.

Une fois ces schémas définis, le frontend et le backend peuvent communiquer séparément sans autre modification, car le frontend sait que les données du schéma seront toujours synchronisées dans tout le système.

Rapide et sécurisé

Le problème de récupération excessive peut entraîner une consommation de bande passante plus élevée pour les clients, ce qui peut, à terme, entraîner un retard dans votre application. L'utilisation de modèles de conception d'API RESTful prend plus de temps pour trier les informations nécessaires à partir d'une énorme charge utile.

En raison de la capacité de GraphQL à éviter la surrécupération et la sous-récupération, le serveur renvoie une forme sécurisée, facile à lire et prévisible qui accélère vos requêtes et réponses API.

Avantages du REST

Malgré la popularité croissante de GraphQL, REST reste l'une des normes d'API les plus populaires. Voyons pourquoi.

  • Courbe d'apprentissage : les API RESTful sont les plus faciles à apprendre et à comprendre. C'est son principal avantage par rapport aux autres API.
  • Sérialisation : REST est livré avec une approche et des formats flexibles pour la sérialisation des données en JSON.
  • Mise en cache : l'API REST peut gérer une charge élevée à l'aide d'un serveur proxy HTTP et d'un cache.
  • Demande complexe : les API REST ont un point de terminaison distinct pour différentes demandes, ce qui permet de rendre la demande complexe plus gérable que dans d'autres API.
  • Propre et simple : les API REST sont élégantes, simples et propres. Ils sont simples à explorer.
  • Procédures HTTP standard : REST utilise des appels de procédure HTTP standard pour récupérer des données et effectuer des requêtes.
  • Client/Serveur : Cela signifie que sa logique métier est découplée de la présentation. Vous pouvez donc changer l'un sans impact sur l'autre.
  • REST est sans état : tous les messages échangés entre le client et le serveur ont tout le contexte nécessaire pour savoir quoi faire avec le message.

Inconvénients de GraphQL

Maintenant que nous avons discuté des avantages de GraphQL par rapport à REST, explorons certains des inconvénients de GraphQL :

  • Courbe d'apprentissage difficile : GraphQL n'est pas aussi facile à apprendre que REST. La partie la plus difficile de la construction d'une API GraphQL est la conception du schéma. Cela prend beaucoup de temps et de connaissances dans le domaine.
  • Téléchargement de fichiers : GraphQL n'a pas de fonction native de téléchargement de fichiers. Cela peut être contourné en utilisant l'encodage Base64, mais le coût de l'encodage et du décodage de cette manière peut être long et coûteux.
  • Mise en cache Web : la mise en cache permet de réduire le trafic fréquent vers le serveur, ce qui accélère les demandes et le processus de réponse en conservant les informations fréquemment consultées à proximité du serveur. GraphQL ne prend pas en charge ou ne repose pas sur les méthodes de mise en cache HTTP, mais dépend plutôt des mécanismes de mise en cache des clients Apollo ou Relay.
  • Inadapté aux petites applications : GraphQL n'est peut-être pas la meilleure architecture d'API pour créer une petite application. Si votre application ne nécessite pas les requêtes plus flexibles proposées par GraphQL, REST est la solution.
  • Problème de requête complexe : la capacité de GraphQL à donner à un client exactement ce qu'il veut peut également entraîner des problèmes de propagation de requête. Si un client soumet trop de requêtes imbriquées, cela peut entraîner l'envoi de mauvaises requêtes, ce qui peut prendre beaucoup de temps pour le serveur. Il est préférable d'utiliser REST avec des points de terminaison personnalisés pour répondre à de telles demandes.

Inconvénients de REST

Maintenant, tournons notre attention vers certains des inconvénients de REST :

Aux prises avec des temps d'arrêt et des problèmes WordPress ? Kinsta est la solution d'hébergement conçue pour vous faire gagner du temps ! Découvrez nos fonctionnalités
  • Plusieurs allers-retours : le plus gros problème avec les API REST est la nature des nombreux points de terminaison. Cela signifie que pour que le client obtienne toutes les ressources nécessaires à une application complète, il doit faire d'innombrables allers-retours pour obtenir les données.
  • Sur-récupération et sous-récupération : le problème de la sur-récupération et de la sous-récupération est un inconvénient majeur dans les API RESTful. Cela peut entraîner un retard dans les réponses en raison de la récupération de charges utiles indésirables importantes.
  • Hiérarchie : étant donné que les API REST sont construites sur des ressources de référencement URI, elles ne conviennent pas aux ressources qui ne sont pas naturellement organisées ou accessibles dans une hiérarchie simple.

Pourquoi utiliser GraphQL au lieu de REST

Ensuite, nous discuterons des raisons pour lesquelles vous pourriez envisager GraphQL pour votre futur développement d'API au lieu de l'API RESTful.

Schéma fortement typé

GraphQL utilise un système de type fort pour définir les capacités de l'API. Dans GraphQL, le langage de définition de schéma (SDL) est utilisé pour définir les paramètres entourant la manière dont le client accède aux données du serveur. Toutes les API exposées au client sont écrites dans SDL, ce qui résout le problème d'incohérence des données observé dans les API RESTful.

Pas de sur-récupération ou de sous-récupération

Le problème de la sur-extraction ou de la sous-extraction est un problème connu avec les API RESTful dans lequel les clients récupèrent plus ou moins d'informations qu'ils n'en ont demandé. GraphQL résout ce problème en fournissant au client un moyen de spécifier les informations nécessaires, puis en renvoyant exactement - et uniquement - ces informations spécifiques.

Points de terminaison multiples

L'un des plus gros problèmes des API RESTful est d'avoir trop de points de terminaison pour accéder aux informations.

Supposons que vous souhaitiez accéder à un utilisateur particulier via son numéro d'identification. Vous seriez présenté avec un point de terminaison comme /users/1 . Mais si vous souhaitez accéder aux photos de cet utilisateur, vous devrez envoyer une demande à un autre point de terminaison, tel que /users/1/photos .

Dans GraphQL, vous disposez d'un point de terminaison unique et vous n'avez pas besoin d'envoyer plusieurs requêtes pour récupérer différentes informations sur l'utilisateur.

Confrontation entre GraphQL et REST

Enfin, nous allons explorer la différence majeure entre les API GraphQL et RESTful. Après cela, nous discuterons de certaines des fonctionnalités d'une bonne conception d'API et comparerons la façon dont chaque technologie les gère.

Performance

Il ne fait aucun doute que GraphQL fonctionne plus rapidement que les API RESTful en raison de sa capacité à fournir un point de terminaison unique pour accéder à toutes vos ressources. Les API RESTful utilisent plusieurs points de terminaison, ce qui peut entraîner une latence du réseau.

Complexité des requêtes

Étant donné que les points de terminaison ne sont pas séparés en plusieurs points de terminaison, les requêtes GraphQL peuvent devenir de plus en plus complexes au fil du temps. Les points de terminaison de l'API RESTful, en revanche, sont séparés, ce qui limite les API RESTful aux requêtes simples.

Popularité et soutien communautaire

GraphQL est un modèle d'architecture d'API et un langage de requête en pleine croissance. Bien qu'il soit encore jeune, son taux d'adoption et son pool de ressources augmentent rapidement, et les ressources abondent déjà pour ceux qui souhaitent l'apprendre par eux-mêmes.

REST, d'autre part, bénéficie déjà d'un vaste soutien communautaire et continue d'être utilisé par des entreprises de toutes sortes, allant de celles qui créent de petits microservices à celles qui créent des applications sociales complexes et au-delà.

À l'heure actuelle, le concours de popularité entre GraphQL et REST est un match nul. Les deux technologies continuent d'être largement utilisées et bien soutenues par la communauté du développement.

Courbe d'apprentissage

La courbe d'apprentissage de GraphQL est abrupte. Cela nécessite une bonne connaissance du domaine du développement d'API et de l'ingénierie logicielle générale. Un débutant complet aura du mal à comprendre suffisamment GraphQL pour créer une application complexe.

Inversement, REST est très facile à démarrer et nécessite moins de connaissances du domaine dès le départ. L'API RESTful est bien intégrée dans la plupart des principaux langages de programmation et frameworks populaires, ce qui facilite son apprentissage.

Une capture d'écran montrant la comparaison entre l'API GraphQL et RESTful.
GraphQL contre REST.

Sommaire

GraphQL est une nouvelle technologie qui suit les traces des modèles architecturaux d'API RESTful, tout comme REST a été introduit pour résoudre les problèmes liés aux modèles d'API SOAP.

GraphQL vous offre des réponses plus rapides, un point de terminaison API unique pour toutes vos requêtes et un schéma strict pour un accès cohérent aux données. Ces raisons sont ce qui a poussé des entreprises de plusieurs milliards de dollars à commencer à passer à GraphQL, même à un stade précoce. Cependant, malgré ses limites, le progéniteur REST de GraphQL continue de maintenir une forte présence sur la scène.

API GraphQL ou RESTful ? En savoir plus dans ce guide Cliquez pour tweeter

Dans ce guide, nous avons exploré tout ce que vous devez savoir sur les API GraphQL et RESTful, y compris les avantages et les inconvénients de chaque technologie, afin de vous aider à choisir en toute confiance celle que vous préférez. Nous avons également discuté des problèmes connus avec les API RESTful - tels que la sur-récupération, la sous-récupération et les points de terminaison multiples - et comment GraphQL tente de résoudre ces problèmes et d'améliorer les performances de votre application.

Vous avez maintenant suffisamment d'informations pour choisir si GraphQL vs REST est approprié pour votre prochain projet. Faites-nous savoir dans la section des commentaires ce que vous allez construire avec votre gagnant choisi !