GraphQL vs REST : leurs vraies différences

GraphQL vs REST

GraphQL vs REST : les mêmes données récupérées des deux façons | We.Inc

Comparez GraphQL et REST avec les mêmes données récupérées des deux façons : nombre de requêtes, over-fetching, mise en cache, retour des erreurs, et un tableau pour choisir.

REST expose de nombreuses URL, une par ressource, et le serveur décide du contenu de chaque réponse. GraphQL expose un seul endpoint, généralement /graphql, où le client envoie une requête qui nomme exactement les champs voulus. REST bénéficie gratuitement du cache HTTP par URL ; GraphQL économise des allers-retours et élimine les champs inutiles, au prix de plus de travail côté serveur.

En un coup d'œil

La comparaison ci-dessous récupère le même écran de données des deux façons. Choisissez un scénario pour voir les appels REST qu'un client ferait, à côté de l'unique requête GraphQL qui les remplace, et ce que chaque réponse omet ou ajoute.

Questions fréquentes

GraphQL est-il plus rapide que REST ?

Pas en soi. Il peut réduire les allers-retours et la taille des réponses pour les écrans qui ont besoin de données liées, mais chaque requête peut coûter plus cher à résoudre côté serveur. Un endpoint REST bien conçu pour un écran peut être tout aussi rapide.

Pourquoi une erreur GraphQL revient-elle avec le statut 200 ?

Un champ peut échouer pendant que d'autres réussissent, donc le serveur renvoie les données dont il dispose plus un tableau errors. Les recommandations GraphQL over HTTP utilisent 2xx pour un succès partiel ; les serveurs qui répondent en application/graphql-response+json utilisent 400 quand une requête échoue à la validation.

Un CDN peut-il mettre en cache les réponses GraphQL ?

Oui, si les requêtes sont envoyées en GET, ce que les serveurs peuvent autoriser pour les seules queries. Les longues requêtes peuvent dépasser les limites d'URL, donc les équipes utilisent des persisted queries qui envoient un court hash au lieu du document entier.

Peut-on utiliser les deux dans un même produit ?

Beaucoup d'équipes le font. Les envois de fichiers, les webhooks et les ressources publiques simples restent souvent des routes REST, tandis que les écrans de l'application lisent via une couche GraphQL qui peut appeler ces mêmes services en dessous.

GraphQL a-t-il besoin de sa propre base de données ?

Non. Un serveur GraphQL est une couche de resolvers, de petites fonctions qui récupèrent chaque champ là où se trouvent les données : une base de données, un service REST ou un fichier. Le schéma décrit des formes, pas un stockage.

Over-fetching et under-fetching

Le cache fonctionne différemment

Erreurs et codes de statut

Lequel choisir

Tableau de décision

Ce qui passe sur le réseau

Une requête GraphQL avec fetch

Chaque opération est un POST de JSON avec les clés query et variables vers l'endpoint unique. L'en-tête Accept demande le type de réponse GraphQL plus récent, avec le JSON simple en repli.

Une réponse GraphQL partielle

Un champ a échoué, il vaut donc null et l'entrée errors le désigne avec path. Le reste des données est quand même arrivé.

Profil avec articles

REST a besoin d'un second appel pour les articles, et les deux réponses contiennent tous les champs inclus par le serveur. La requête GraphQL ne renvoie que le nom, l'avatar et trois titres d'articles.

Noms seulement

Pour une simple liste, l'appel REST tient en une requête dans les deux cas, mais il envoie des fiches utilisateur complètes. GraphQL n'envoie que les deux champs demandés.

Article avec commentaires et auteurs

Sans endpoint sur mesure, REST parcourt l'arbre un niveau par requête, et récupérer l'auteur de chaque commentaire peut demander un appel de plus par commentaire. GraphQL imbrique tout l'arbre dans une seule requête.

Créer un article

Les écritures se ressemblent : une requête chacune. REST utilise la méthode POST sur une URL de collection ; GraphQL envoie une mutation, toujours en HTTP POST, et choisit quels champs du nouvel article renvoyer.

Les mêmes données, des deux façons

Choisir un scénario

Requêtes REST

Requête GraphQL

Copier les requêtes REST

Copier la requête GraphQL

REST : {n} requête(s). GraphQL : {v} requête.

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site