Il peut être difficile de choisir les technologies qui feront partie de la pile technologique de votre prochain projet. Dans de nombreux cas — et surtout lorsqu’il s’agit de choisir entre les API GraphQL et RESTful — il s’agit de choisir la meilleure architecture de conception d’API.

Il existe quatre façons importantes de construire des API : SOAP, GRPC, REST et GraphQL. Nous nous limitons souvent à REST et GraphQL lorsque nous voulons construire des API. Cela est dû au fait que REST a changé les méthodes traditionnelles de construction d’API avec SOAP et GRPC.

GraphQL est largement étiqueté comme un meilleur REST car il représente une meilleure façon de construire des API. De nombreux développeurs pensent que GraphQL va remplacer 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.

Ces deux méthodes de construction d’API sont totalement différentes. En pratique, ces technologies fonctionnent en envoyant une requête HTTP et en recevant le résultat. Elles ont toutes deux leurs avantages et leurs inconvénients, et dans cet article, nous allons discuter en profondeur de ces deux grandes technologies qui ont changé la façon dont nous développons et mettons à l’échelle les API.

Mais avant de nous plonger dans les détails, explorons d’abord la signification de GraphQL et des API RESTful.

Qu’est-ce que GraphQL ?

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

La caractéristique principale de GraphQL est sa capacité à demander et à recevoir uniquement les données spécifiques demandées – rien de plus. Il est donc beaucoup plus simple de faire évoluer vos API en même temps que votre application.

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

Architecture de l'API GraphQL.
Architecture de l’API GraphQL.

Le diagramme ci-dessus est une représentation typique de l’architecture GraphQL. Les clients effectuent des requêtes à partir de différents appareils, et GraphQL traite leurs requêtes et renvoie uniquement les données demandées. Cela résout parfaitement le problème de l’over-fetching et du under-fetching dans les API RESTful.

Une requête réussie dans GraphQL.
Une requête réussie dans GraphQL.

Dans l’exemple ci-dessus, nous montrons un playground 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.

GraphQL a été créé par Facebook dans le but principal de résoudre l’expérience des développeurs d’applications mobiles lorsqu’ils travaillent avec des API REST. Depuis que sa première version open source a été publiée en 2015, GraphQL a connu une croissance énorme en raison de l’adoption de la technologie par de grands acteurs du secteur de la technologie.

Entreprises utilisant GraphQL

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

Facebook

Facebook a créé GraphQL, et l’utilise en production pour alimenter ses applications mobiles depuis 2012. La société de réseaux sociaux, qui pèse plusieurs milliards de dollars, a mis en libre accès la spécification GraphQL en 2015, la rendant ainsi accessible à de nombreux environnements et à des équipes de toutes tailles.

Facebook utilise GraphQL.
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 GraphQL GitHub. L’API GraphQL de GitHub offre des requêtes plus précises et plus flexibles que l’API REST de GitHub.

GitHub utilise également GraphQL.
GitHub utilise également GraphQL.

Pinterest

Pinterest est également un adopteur précoce de GraphQL. Le géant du partage de photos a publiquement discuté de son exploration précoce de GraphQL et de la façon dont il utilise la technologie GraphQL qui alimente son entreprise milliardaire.

Pinterest utilise également GraphQL pour son site.
Pinterest utilise également GraphQL pour son site.

De nombreuses autres entreprises milliardaires telles que Intuit, Shopify, Coursera et Airbnb alimentent leurs applications avec GraphQL. Et cette préférence de grande envergure pour REST ne fait que croître.

Qu’est-ce qu’une API RESTful ?

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

Si ces principes sont respectés dans une API, l’application de cette API est qualifiée de « RESTful » L’API REST de WordPress en est un excellent exemple.

Vous trouverez ci-dessous certains des principes et des 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 par le biais des points de terminaison.
  • Interface uniforme: Les données vues dans l’interface sont identiques sur tous les appareils.
  • Absence d’état: Le serveur ne se souvient pas si la requête actuelle est faite pour la première fois ou non. À chaque fois qu’une requête est faite, elle doit inclure toutes les informations nécessaires pour la traiter à partir de zéro.
  • Mise en cache: La mise en cache et le stockage des sessions sont autorisés, mais ils doivent être configurés pour permettre aux utilisateurs finaux de refuser la mise en cache des données.
  • Architecture de système en couches: Les API doivent être conçues de manière à ce que ni le client ni le serveur ne puissent savoir s’ils communiquent directement ou par le biais d’un intermédiaire.

Le diagramme ci-dessous représente l’architecture REST de base. Il montre comment les requêtes et les réponses sont généralement traitées.

Architecture d'API REST.
Architecture d’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 à un milliard de dollars.

Récupération des données via un seul point de terminaison d’API

Le principal avantage de GraphQL est sa capacité à accéder à n’importe quel point de données ou à tous les points de données via un point de terminaison d’API unique.

L’un des problèmes les plus courants avec les API RESTful est de disposer de trop de points de terminaison pour accéder aux informations. Avec 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 schéma ci-dessous présente un exemple clair de récupération de ressources à l’aide d’une 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, alors que plusieurs points de terminaison d’API sont nécessaires pour accéder à différentes ressources dans l’API RESTful.

Points de terminaison d'API dans REST et GraphQL.
Points de terminaison d’API dans REST et GraphQL.

Pas d’over-fetching ou under-fetching

La question de l’over-fetching ou du under-fetching est un problème connu des API RESTful. Cela se produit lorsque les clients téléchargent des données en touchant des points de terminaison qui renvoient des structures de données fixes, ou lorsqu’ils récupèrent plus ou moins que ce qu’ils attendaient.

L’over-fetching fait que la requête reçoit – ou « fetch » – plus de données que ce qui est requis par une requête donnée. Imaginez que vous récupériez tous les utilisateurs d’un tableau dans l’intention d’afficher leurs noms d’utilisateur sur votre page d’accueil. Dans ce cas, l’over-fetching renverra toutes les données sur chaque utilisateur, y compris (mais pas seulement) le nom.

L’under-fetching est relativement rare, mais il se produit lorsque le point de terminaison spécifique ne parvient pas à fournir toutes les informations demandées. Le client devra faire des requêtes supplémentaires pour accéder aux autres informations si nécessaire.

GraphQL résout efficacement le problème de l’over-fetching ou du under-fetching en saisissant la ressource exacte que le client a demandée sans aucun détail supplémentaire.

Meilleure gestion des systèmes complexes et des micro-services

GraphQL peut unifier et masquer la complexité des systèmes multiples intégrés.

Par exemple, disons que nous voulons migrer d’une application backend monolithique vers une architecture de micro-services. L’API GraphQL aide à gérer la communication entre divers micro-services en les fusionnant dans 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, puisque le frontend sait que les données du schéma seront toujours synchronisées dans l’ensemble du système.

Rapide et sécurisé

Le problème de l’over-fetching peut entraîner une consommation de bande passante plus élevée pour les clients, ce qui peut, à terme, provoquer un décalage dans votre application. L’utilisation de schémas de conception d’API RESTful prend plus de temps pour trier les informations nécessaires à partir d’une énorme charge utile.

Grâce à la capacité de GraphQL à éviter l’over-fetching et l’under-fetching, le serveur renvoie une forme sûre, facile à lire et prévisible, ce qui rend vos requêtes et réponses API plus rapides.

Avantages de REST

Malgré la popularité croissante de GraphQL, REST reste l’une des normes d’API les plus populaires. Voyons un peu 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 s’accompagne d’une approche et de formats flexibles pour sérialiser les données en JSON.
  • Mise en cache: L’API REST peut gérer une charge élevée avec l’aide d’un serveur proxy HTTP et d’un cache.
  • Requête complexe: Les API REST ont un point de terminaison distinct pour les différentes requêtes, ce qui permet de gérer les requêtes complexes plus facilement que dans les autres API
  • Propre et simple: Les API REST sont élégantes, simples et propres. Elles sont faciles à explorer.
  • Procédures HTTP standard: REST utilise des appels de procédures HTTP standard pour récupérer des données et effectuer des requêtes.
  • Client/serveur: Cela signifie que sa logique commerciale est découplée de la présentation. Vous pouvez donc modifier l’une sans affecter l’autre.
  • REST is Stateless: Tous les messages échangés entre le client et le serveur possèdent 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 demande beaucoup de temps et de connaissances du domaine.
  • Téléversement de fichiers: GraphQL ne dispose pas d’une fonction native de téléversement de fichiers. Il est possible de contourner ce problème 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 requêtes et le processus de réponse en gardant les informations fréquemment consultées à proximité du serveur. GraphQL ne prend pas en charge ou ne s’appuie pas sur les méthodes de mise en cache HTTP, dépendant 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 la création d’une petite application. Si votre application n’a pas besoin des requêtes plus flexibles offertes par GraphQL, REST est la meilleure solution.
  • Problème de requêtes complexes: La capacité de GraphQL à donner au client exactement ce qu’il veut peut également entraîner des problèmes de propagation des requêtes. Si un client soumet trop de requêtes imbriquées, les mauvaises requêtes peuvent être envoyées, ce qui peut faire perdre beaucoup de temps au serveur. Il est préférable d’utiliser REST avec des points de terminaison personnalisés pour répondre à de telles requêtes.

Inconvénients de REST

Intéressons-nous maintenant à certains des inconvénients de REST :

  • Allers-retours multiples: Le plus gros problème des API REST est la nature des nombreux points de terminaison. Cela signifie que pour que le client obtienne toutes les ressources d’une application complète, il doit faire d’innombrables allers-retours pour obtenir les données.
  • Extraction excessive et insuffisante: Le problème de l’extraction excessive et insuffisante est un inconvénient majeur des API RESTful. Il peut entraîner un retard dans les réponses en raison de l’extraction de grandes charges utiles non souhaitées.
  • Hiérarchie: Puisque les API REST sont construites sur des ressources de référencement URI, elles sont mal adaptées 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 allons voir pourquoi vous devriez envisager GraphQL pour votre futur développement d’API au lieu de RESTful API.

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 façon dont le client accède aux données du serveur. Toutes les API exposées au client sont écrites en SDL, ce qui résout le problème d’incohérence des données observé dans les API RESTful.

Pas de recherche excessive ou insuffisante

Les API RESTful posent le problème de l’extraction excessive ou insuffisante de données, les clients recevant plus ou moins d’informations que ce qu’ils avaient demandé. GraphQL résout ce problème en fournissant au client un moyen de spécifier les informations dont il a besoin, 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’ID. Un point de terminaison comme /users/1 vous sera présenté. Mais si vous voulez accéder aux photos de cet utilisateur, vous devrez envoyer une requête à un autre point de terminaison, tel que /users/1/photos.

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

Confrontation GraphQL vs REST

Enfin, nous allons explorer la différence majeure entre les API GraphQL et RESTful. Ensuite, nous aborderons certaines des caractéristiques d’une bonne conception d’API et nous comparerons la façon dont chaque technologie les traite.

Performances

Il ne fait aucun doute que GraphQL est plus performant que les API RESTful en raison de sa capacité à fournir un seul point de terminaison 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 des API RESTful, en revanche, sont séparés, ce qui limite les API RESTful à des requêtes simples.

Popularité et support de la communauté

GraphQL est un modèle architectural d’API et un langage de requête en plein essor. Bien qu’il soit encore jeune, son taux d’adoption et son réservoir 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 construisent de petits micro-services à 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é des développeurs.

Courbe d’apprentissage

La courbe d’apprentissage de GraphQL est abrupte. Elle exige une bonne connaissance du domaine du développement d’API et du génie logiciel en général. Un débutant complet aura du mal à comprendre GraphQL suffisamment bien pour construire une application complexe.

À l’inverse, REST est très facile à prendre en main 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 des frameworks populaires, ce qui rend son apprentissage très facile.

GraphQL vs REST.
GraphQL vs REST.

Résumé

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 seul point de terminaison d’API pour toutes vos requêtes, et un schéma strict pour un accès cohérent aux données. Ce sont ces raisons qui ont poussé des entreprises multimilliardaires à passer à GraphQL, même à un stade précoce. Cependant, malgré ses limites, REST, l’ancêtre de GraphQL, continue à maintenir une forte présence sur la scène.

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 à décider en toute confiance laquelle vous préférez. Nous avons également abordé les problèmes connus des API RESTful, tels que l’over-fetching, l’under-fetching 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 ou REST est approprié pour votre prochain projet. Faites-nous savoir dans la section des commentaires ce que vous allez construire avec le gagnant de votre choix!

Solomon Eseme

I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me