Quelle est la différence entre GraphQL et REST ?
GraphQL et REST sont deux approches distinctes de conception d'API pour l'échange de données sur Internet. REST permet aux applications clientes d'échanger des données avec un serveur à l'aide de verbes HTTP, qui est le protocole de communication standard d'Internet. D'autre part, GraphQL est un langage de requête d'API qui définit les spécifications de la manière dont une application cliente doit demander des données à un serveur distant. Vous pouvez utiliser GraphQL dans vos appels d'API sans vous fier à l'application côté serveur pour définir la demande. GraphQL et REST sont des technologies puissantes qui sous-tendent la plupart de nos applications modernes.
Quelles sont les similitudes entre SOAP et REST ?
GraphQL et REST sont tous deux des styles d'architecture d'API populaires qui permettent l'échange de données entre différents services ou applications dans un modèle client-serveur.
Les API facilitent l'accès aux données et les opérations relatives aux données de la manière suivante :
- Un client envoie une demande d'API à un point de terminaison ou à plusieurs points de terminaison sur un serveur
- Le serveur fournit une réponse contenant des données, l'état des données ou des codes d'erreur
REST et GraphQL vous permettent de créer, de modifier, de mettre à jour et de supprimer des données sur une application, un service ou un module distinct via une API. Les API développées avec REST sont appelées API RESTful ou API REST. Celles développées avec GraphQL sont simplement des API GraphQL.
Les équipes frontales et dorsales utilisent ces architectures d'API pour créer des applications modulaires et accessibles. L'utilisation d'une architecture d'API permet de garantir la sécurité, la modularité et l'évolutivité des systèmes. Cela rend également les systèmes plus performants et plus faciles à intégrer à d'autres systèmes.
Ensuite, nous discutons d'autres similitudes entre GraphQL et REST.
Architecture
REST et GraphQL implémentent tous deux plusieurs principes architecturaux d'API communs. Par exemple, voici les principes qu'ils partagent :
- Les deux étant apatrides, le serveur n'enregistre pas l'historique des réponses entre les requêtes
- Les deux utilisent un modèle client-serveur, de sorte que les demandes provenant d'un seul client aboutissent à des réponses provenant d'un seul serveur
- Les deux sont basés sur HTTP, car HTTP est le protocole de communication sous-jacent
Conception basée sur les ressources
REST et GraphQL conçoivent tous deux leur échange de données en fonction des ressources. Une ressource fait référence à toute donnée ou à tout objet auquel le client peut accéder et manipuler via l'API. Chaque ressource possède son propre identifiant unique (URI) et un ensemble d'opérations (méthodes HTTP) que le client peut effectuer sur elle.
Prenons l'exemple d'une API de réseaux sociaux dans laquelle les utilisateurs créent et gèrent des publications. Dans une API basée sur les ressources, une publication serait une ressource. Elle possède son propre identifiant unique, par exemple /posts/1234. Et elle dispose d'un ensemble d'opérations, telles que GET pour récupérer la publication dans REST ou query pour récupérer la publication dans GraphQL.
Data Exchange
REST et GraphQL prennent tous deux en charge des formats de données similaires.
JSON est le format d'échange de données le plus populaire que tous les langages, plateformes et systèmes comprennent. Le serveur renvoie des données JSON au client. D'autres formats de données sont disponibles mais moins couramment utilisés, notamment XML et HTML.
De même, REST et GraphQL prennent tous deux en charge la mise en cache. Ainsi, les clients et les serveurs peuvent mettre en cache les données fréquemment consultées pour accélérer les communications.
Neutralité du langage et de la base de données
Les API GraphQL et REST fonctionnent avec n'importe quelle structure de base de données et n'importe quel langage de programmation, à la fois côté client et côté serveur. Cela les rend hautement interopérables avec n'importe quelle application.
Quelles sont les limites de REST que GraphQL tente de surmonter ?
GraphQL est apparu en 2012 en réponse au besoin de rapidité des plateformes de médias sociaux émergentes. Les développeurs ont constaté que les architectures d'API existantes, telles que REST, étaient trop longues et structurées pour produire des fils d'actualités de manière efficace.
Ensuite, nous discutons de certains des défis auxquels ils ont été confrontés.
Échange de données à structure fixe
L'API REST exige que les requêtes des clients suivent une structure fixe pour recevoir une ressource. Cette structure rigide est facile à utiliser, mais ce n'est pas toujours le moyen le plus efficace d'échanger exactement les données nécessaires.
Extraire et sous-extraire
Les API REST renvoient toujours un jeu de données complet. Par exemple, à partir d'un objet personnel dans l'API REST, vous recevrez le nom, la date de naissance, l'adresse et le numéro de téléphone de la personne. Vous obtiendrez toutes ces données même si vous n'avez besoin que d'un numéro de téléphone.
De même, si vous souhaitez connaître le numéro de téléphone et le dernier achat d'une personne, vous aurez besoin de plusieurs requêtes d'API REST. L'URL /person renverrait le numéro de téléphone et l'URL /purchase renverrait l'historique des achats.
Les développeurs de réseaux sociaux ont dû écrire beaucoup de code uniquement pour traiter les demandes d'API, ce qui a affecté les performances et l'expérience utilisateur.
GraphQL est apparu comme une solution basée sur les requêtes. Les requêtes peuvent renvoyer les données exactes dans un seul échange de requêtes et de réponses d'API.
Principales différences : GraphQL vs. REST
Une API REST est un concept architectural pour la communication entre applications. D'autre part, GraphQL est une spécification, un langage de requête d'API et un ensemble d'outils. GraphQL fonctionne sur un seul point de terminaison via HTTP.
En outre, le développement de REST s'est davantage concentré sur la création de nouvelles API. Dans le même temps, GraphQL s'est concentré sur les performances et la flexibilité des API.
Nous donnons quelques différences supplémentaires ci-dessous.
Demande côté client
Voici ce qu'une requête REST utilise pour fonctionner :
- Verbes HTTP qui déterminent l'action
- Une URL qui identifie la ressource sur laquelle le verbe HTTP doit être activé
- Paramètres et valeurs à analyser si vous souhaitez créer ou modifier un objet au sein d'une ressource côté serveur existante
Par exemple, vous utilisez GET pour obtenir des données en lecture seule à partir d'une ressource, POST pour ajouter une nouvelle entrée de ressource ou PUT pour mettre à jour une ressource.
En revanche, voici ce que les requêtes GraphQL utilisent :
- Requête pour obtenir des données en lecture seule
- Mutation pour modifier les données
- Abonnement pour recevoir des mises à jour de données basées sur des événements ou en streaming
Un format de données décrit la manière dont vous souhaitez que le serveur renvoie les données, y compris les objets et les champs qui correspondent au schéma côté serveur. Vous pouvez également saisir de nouvelles données. En interne, GraphQL envoie chaque requête client sous forme de requête HTTP POST.
Données renvoyées au client
Dans l'architecture REST, les données sont renvoyées au client par le serveur dans la structure complète des ressources spécifiée par le serveur. Les exemples suivants montrent les données renvoyées dans REST et GraphQL.
Exemple de données renvoyées dans REST
Dans REST, GET /posts renvoie ce qui suit :
[
{
« id » : 1,
« titre » : « Premier message »,
« content » : « Ceci est le contenu du premier post. »
},
{
« id » : 2,
« titre » : « Deuxième message »,
« contenu » : « Ceci est le contenu du deuxième message »
},
{
« id » : 3,
« titre » : « Troisième message »,
« contenu » : « Ceci est le contenu du troisième message. »
}
]
Exemple de données renvoyées dans GraphQL
Lorsque vous utilisez GraphQL, seules les données spécifiées dans la structure fournie par le client sont renvoyées.
GET /graphql?query{post(id: 1) {id title content}} renvoie uniquement le premier message :
{
« données » : {
"messages": [
{
« id » : « 1 »,
« titre » : « Premier message »,
« content » : « Ceci est le contenu du premier post. »
},
]}}
Schéma côté serveur
GraphQL utilise un schéma côté serveur pour définir les données et les services de données, qui diffère d'une API REST.
Le schéma, écrit dans le langage de définition de schéma GraphQL, inclut des détails tels que :
- Types d'objets et champs qui appartiennent à chaque objet
- Fonctions de résolution côté serveur qui définissent une opération pour chaque champ
Le schéma définit explicitement les types pour décrire toutes les données disponibles sur le système et la manière dont les clients peuvent accéder à ces données ou les modifier.
En revanche, les API REST ne nécessitent pas de schéma côté serveur. Mais vous pouvez le définir en option pour une conception d'API, une documentation et un développement client efficaces.
Contrôle de version
À mesure que les API évoluent, leurs structures de données et leurs opérations peuvent changer. Pour les clients qui ne sont pas au courant de ces modifications, cela peut endommager leurs systèmes ou introduire des erreurs inconnues.
Les API REST incluent souvent la gestion des versions dans l'URL pour résoudre ce problème, comme https://example.com/api/v1/person/12341. Toutefois, la gestion des versions n'est pas obligatoire et peut entraîner des erreurs.
GraphQL nécessite une rétrocompatibilité avec l'API. Les champs supprimés renvoient donc un message d'erreur, ou ceux dont la balise est obsolète renvoient un avertissement.
Gestion des erreurs
GraphQL est une architecture d'API fortement typée, ce qui signifie qu'elle nécessite une description détaillée des données, de leur structure et des opérations de données dans le schéma. En raison du niveau de détail du schéma, le système peut identifier automatiquement les erreurs de demande et fournir des messages d'erreur utiles.
Les API REST sont peu typées et vous devez intégrer la gestion des erreurs dans le code environnant. Par exemple, si une requête PUT analyse une valeur numérique sous forme de texte plutôt que sous forme d'entier, le système n'identifie pas automatiquement l'erreur.
Quand utiliser GraphQL vs. REST
Vous pouvez utiliser les API GraphQL et REST de manière interchangeable. Cependant, dans certains cas d'utilisation, l'un ou l'autre convient mieux.
Par exemple, GraphQL est probablement un meilleur choix si vous tenez compte des points suivants :
- Vous avez une bande passante limitée et vous souhaitez minimiser le nombre de demandes et de réponses
- Vous disposez de plusieurs sources de données et vous souhaitez les combiner sur un seul point de terminaison
- Les demandes de vos clients varient considérablement et vous vous attendez à des réponses très différentes
D'un autre côté, REST est probablement un meilleur choix si vous tenez compte des considérations suivantes :
- Vous avez des applications plus petites avec des données moins complexes
- Vous disposez de données et d'opérations que tous les clients utilisent de la même manière
- Vous n'avez aucune exigence en matière de requêtes de données complexes
Il est également possible de créer une application unique avec à la fois des API GraphQL et des API REST pour différents domaines de fonctionnalités.
Comment utiliser GraphQL et REST sur la même API
La mise à niveau d'une API RESTful vers une API GraphQL est possible sans effectuer de réécriture complète.
Voici un aperçu du processus :
- Comprenez le modèle de données de l'API RESTful. Pour ce faire, examinez la forme des données dans chaque ressource URL.
- Écrivez le schéma GraphQL à partir du modèle de données.
- Déterminez les opérations que les clients effectuent sur les données et incluez-les dans le schéma.
- Créez une fonction de résolution dans le code côté serveur pour chaque champ du schéma.
- Créez un serveur GraphQL avec les résolveurs et le schéma.
Ensuite, les clients peuvent communiquer avec votre API à l'aide de GraphQL ou de REST.
Résumé des différences : REST vs. GraphQL
REST |
GraphQL |
|
De quoi s'agit-il ? |
REST est un ensemble de règles qui définit l'échange de données structurées entre un client et un serveur. |
GraphQL est un langage de requête, un style d'architecture et un ensemble d'outils permettant de créer et de manipuler des API. |
Idéal pour |
REST convient aux sources de données simples où les ressources sont bien définies. |
GraphQL convient aux sources de données volumineuses, complexes et interdépendantes. |
Accès aux données |
REST possède plusieurs points de terminaison sous la forme d'URL pour définir les ressources. |
GraphQL possède un point de terminaison d'URL unique. |
Données renvoyées |
REST renvoie les données dans une structure fixe définie par le serveur. |
GraphQL renvoie les données dans une structure flexible définie par le client. |
Comment les données sont structurées et définies |
Les données REST sont faiblement typées. Le client doit donc décider comment interpréter les données formatées lorsqu'elles sont renvoyées. |
Les données GraphQL sont fortement typées. Ainsi, le client reçoit des données dans des formats prédéterminés et mutuellement compris. |
Vérification des erreurs |
Avec REST, le client doit vérifier si les données renvoyées sont valides. |
Avec GraphQL, les demandes non valides sont généralement rejetées par la structure du schéma. Cela entraîne la génération automatique d'un message d'erreur. |
Comment AWS Support peut-il répondre à vos exigences en matière de GraphQL et de REST ?
Amazon Web Services (AWS) vous aide à créer et à diffuser des API mieux gérées.
AWS AppSync crée des API GraphQL et des API de publication et d'abonnement (pub/sub) sans serveur. Ils simplifient le développement d'applications grâce à un point de terminaison unique permettant d'interroger, de mettre à jour ou de publier des données en toute sécurité.
Avec AWS AppSync, vous créez des API qui permettent aux clients d'effectuer les opérations suivantes :
- Interagissez avec plusieurs sources de données (SQL, NoSQL, données de recherche, points de terminaison REST et microservices) avec un seul appel réseau
- Synchronisation automatique des données entre les applications mobiles et Web et le cloud
- Diffuser des données depuis le backend vers et entre les clients connectés
- Accédez aux données de l'Internet des objets (IoT) pour créer des tableaux de bord en temps réel dans une application mobile ou Web
De même, Amazon API Gateway est un service entièrement géré qui vous permet de créer, publier, maintenir, surveiller et sécuriser facilement des API à n'importe quelle échelle.
Vous trouverez ci-dessous les avantages que vous pouvez tirer de l'utilisation de la passerelle API :
- Offrir aux utilisateurs des performances à haut débit pour les requêtes et les réponses API
- Autorisez l'accès à vos API
- Exécutez plusieurs versions de la même API simultanément afin d'itérer, de tester et de publier rapidement de nouvelles versions
- Surveillez les métriques de performance et les informations sur les appels d'API, la latence des données et les taux d'erreur
Commencez à utiliser GraphQL et REST sur AWS en créant un compte dès aujourd'hui.