Catégories
Dev

Oubliez REST pour vos API

REST est utilisé par de très nombreux développeur pour transmettre des données via HTTP alors que GraphQL est généralement présenté comme la technologie allant remplacer les API REST.

Dans cet article, on regardera les limites et les différences entre ces deux solutions, ce qui vous aidera à décider laquelle choisir pour votre prochain projet.

Mais REST c’est quoi ?

REST (Representational State Transfer) est une architecture de conception d’API utilisée pour implémenter des services Web à l’aide d’un ensemble prédéfini d’opérations ( notamment GET, POST, PUT et DELETE ).
L’idée de base de REST est de récupérer une ressource, une donnée en envoyant une requête sur une l’URL, puis en récupérant les données dans la réponse (au format généralement JSON).

Les avantages de REST

REST est évolutif, car il sépare le client et le serveur afin que vous puissiez facilement faire évoluer votre application.
La flexibilité est un autre avantage de l’utilisation de REST, car il peut être conçu pour gérer différents types d’appels et renvoyer différents formats de données.

Les limites de REST

Surextraction – C’est à ce moment que le point de terminaison de l’API fournit beaucoup plus d’informations que ce qui est requis par le client.
Sous-extraction – C’est à ce moment que le point de terminaison de l’API ne fournit pas toutes les informations requises. Ainsi, le client doit faire plusieurs demandes pour obtenir tout ce dont l’application a besoin.

Qu’est-ce que GraphQL?

GraphQL est une architecture de conception d’API qui adopte une approche différente où tout est considéré comme un graphe. Cela signifie que vous pouvez personnaliser votre demande de manière à pouvoir demander quoi que ce soit au point de terminaison et vous obtiendrez tout ce que vous avez demandé. En plus de cela, il vous permet de combiner différentes entités en une seule requête. Ainsi vous avez la maîtrise à la fois des entités de données que vous souhaitez récupérer ainsi que le périmètre (la complétude) de ces dernières.

Avantages de GraphQL

Récupérez des données précises et rien de plus. Dans GraphQL, vous obtenez ce que vous demandez. Le développement est généralement plus rapide côté client. Si vous besoin en matière de donnée évolue, il vous suffit de modifier la requête côté client, les modifications sont donc limités ce qui permet des évolutions et des itérations rapides du produit. Les équipes de développement côté client et côté serveur peuvent travailler de manière indépendante, à la seule condition que les deux équipes connaissent la structure des données.

Limitations de GraphQL

Pas adapté à première vue aux applications simples, car configurer des types, des requêtes, … peut vite être lourd, là où cela peut être fait facilement en utilisant REST.
GraphQL utilise un seul point de terminaison, au lieu de plusieurs selon la spécification HTTP. La mise en cache au niveau du réseau est indispensable car elle peut réduire la quantité de trafic vers un serveur.

Exemple simple comparant les deux

Disons, par exemple, que nous affichons le flux d’un utilisateur avec une liste du message de l’utilisateur et de ses abonnés. Dans notre cas, nous devons afficher l’auteur du message, les messages ainsi que les abonnés de cet utilisateur.
Si nous devions utiliser REST, nous aurions fait au moins 2 ou 3 requêtes, similaires à ceci:

  • /user/ pour obtenir les détails de l’utilisateur, dont son nom.
  • /user/posts pour obtenir la liste des messages publiés par cet utilisateur.
  • /user/followers pour obtenir la liste des followers de l’utilisateur.

Mais dans tous ces cas, nous surexploitons les données. Par exemple, dans la première requête, nous n’avons besoin que du nom, mais nous obtenons tous les détails sur l’utilisateur.

C’est là que GraphQL montre sa puissance. En créant correctement la requête, nous allons obtenir le resultat escompté en une seule itération et sans données superflues. Ainsi, avec GraphQL, nous pouvons utiliser une requête similaire à celle-ci:

query {
  User(id: '123') {
    name
    posts {
      title
    }
    followers {
      name
    }
  }
}

En utilisant une telle requête, nous pourrons obtenir une réponse JSON avec les bonnes propriétés.

GraphQL vs REST

Pour résumer, voici quelques différences marquantes:

Récupération des données

REST provoque une sur-extraction ou une sous-extraction, alors que ce n’est pas le cas avec GraphQL. Dans GraphQL, ce que vous obtenez seulement ce dont vous avez besoin.

Définition d’objet (réponse JSON)

Dans REST, vous définissez l’objet sur le Backend et dans GraphQL vous définissez cet objet sur le Frontend.

Mise en cache automatique

REST met automatiquement la mise en cache en vigueur alors que GraphQL n’a pas de système de mise en cache automatique, mais l’utilisation de clients tels que Apollo Client, Relay, etc. rendra la mise en cache possible

Gestion des erreurs

La gestion des erreurs dans REST est beaucoup plus simple que dans GraphQL, qui vous donne généralement un code d’état 200 OK, même en cas d’erreur. Mais, lors de l’utilisation de clients tels que Apollo Client, Relay, etc., il est tout à fait possible de gérer facilement les erreurs

Conclusion

GraphQL a certainement de nombreux avantages par rapport à REST, mais ce n’est peut-être pas toujours la meilleure approche. Comme nous l’avons vu plus haut, le choix dépend de votre application, qu’il s’agisse de choisir REST ou GraphQL.
J’espère que cela vous aidera lorsque vous devrez sélectionner votre approche pour vos futurs projets. N’hésitez pas à partager vos expériences sur GraphQL ou REST, déposez-les dans la section commentaires.

Laisser un commentaire