REST, GraphQL et gRPC sont les 3 technologies de développement d'API les plus populaires pour les applications Web modernes. Alors, lors de la sélection technologique, comment choisir parmi les trois ?
Dans cet article, nous comparerons les fonctionnalités et l'utilisation de REST, GraphQL et gRPC.
REST – La technologie la plus populaire
REST
Representational State Transfer (REST) est la technologie de développement d'API la plus populaire dans le développement Web moderne. Il s'agit d'une architecture de transfert de données sans état. Le client fait une requête avec tous les détails nécessaires à la requête, mais le serveur ne conserve pas l'état du client.
L'API REST prend en charge les en-têtes de mise en cache natifs HTTP et utilise les méthodes HTTP (POST, GET, PUT, PATCH et DELETE) pour manipuler les données. Étant donné que REST a un faible seuil d’apprentissage, tout le monde peut facilement utiliser RE
ST.
REST est facile à étendre et fiable Si nous hésitons encore, nous pouvons le choisir en premier.
Avantages de REST
- Vous pouvez utiliser en toute sécurité les méthodes HTTP standard pour implémenter les opérations CRUD.
- REST est déjà très mature, dispose d'une documentation complète et est facile à démarrer.
- Prise en charge de la mise en cache.
- Évolutivité conviviale et assure la séparation entre le client et le serveur.
- Il peut être facilement intégré à l'application.
Inconvénients de REST
- Il existe des problèmes de sur-acquisition et de sous-acquisition. La surextraction se produit lorsqu'une API renvoie plus de données que ce qui est réellement nécessaire. Cela peut entraîner un trafic réseau inutile, des performances plus lentes et une utilisation supplémentaire de la bande passante. La sous-extraction se produit lorsqu'une API ne renvoie pas toutes les données nécessaires requises pour un cas d'utilisation spécifique, ce qui nécessite plusieurs requêtes pour récupérer toutes les informations requises. Cela peut également entraîner un ralentissement des performances et une augmentation du trafic réseau, ainsi qu'une base de code plus complexe.
- Impossible de conserver le statut.
- Charge utile relativement importante.
- À mesure qu'une application évolue, le nombre de points de terminaison augmente considérablement.
- Pas facile de mettre à jour le schéma de base de données ou la structure des données.
Quand choisir REST
S'il n'y a pas d'exigences spécifiques, REST est le meilleur choix. Si vous débutez dans le développement, l'utilisation de REST est parfaite car elle nécessite une courbe d'apprentissage peu profonde. De plus, il dispose d’un vaste écosystème dans lequel vous pouvez facilement trouver des solutions à vos problèmes.
REST est mieux utilisé lors du traitement de volumes de requêtes plus importants et d'une bande passante limitée, car sa prise en charge de la mise en cache peut être utilisée pour améliorer les performances.
En général, si votre application n'a pas explicitement besoin d'utiliser GraphQL ou gRPC, utilisez REST.
GraphQL - Norme axée sur le client
GraphQL est un langage de requête de données lancé en 2015 qui permet aux développeurs de localiser et d'obtenir exactement les données dont ils ont besoin. Par rapport à REST, GraphQL est une approche axée sur le client dans laquelle le client décide quelles données sont nécessaires, comment les obtenir et quel format. Cela résout également les problèmes de sur-récupération et de sous-récupération car le client peut spécifier explicitement les données dont il a besoin.
GraphQL utilise des requêtes, des mutations et des abonnements pour manipuler les données.
- Requête : Demander des données au serveur.
- Change : Modifiez les données côté serveur.
- Abonnement : obtenez des données mises à jour en temps réel grâce à l'abonnement lorsque les données sont mises à jour.
GitHub est l'une des plus grandes entreprises utilisant GraphQL. Son passage de REST à GraphQL en 2016 a grandement contribué à la croissance rapide de GitHub.
Avantages de GraphQL
- Il est très flexible et peut répondre exactement aux besoins des clients.
- Il n'y a pas de problème de sur-acquisition et de sous-acquisition.
- Prise en charge des langages grand public, notamment JavaScript, Java, Python, Ruby et PHP.
- Permet la personnalisation de la structure des données.
- Une seule requête peut contenir des champs provenant de plusieurs ressources.
Inconvénients de GraphQL
- Les requêtes peuvent être complexes.
- Manque de prise en charge de la mise en cache intégrée.
- L'apprentissage de GraphQL est plus difficile que REST.
- Le téléchargement de fichiers n'est pas pris en charge par défaut.
Quand choisir GraphQL
Lorsque la requête contient de nombreux enregistrements de la base de données, GraphQL est le meilleur choix. Vous pouvez utiliser GraphQL pour éliminer la récupération excessive et interroger uniquement les données nécessaires pour améliorer les performances des applications. De plus, GraphQL est idéal pour les situations où les données doivent être regroupées à partir de plusieurs sources.
Vous pouvez également utiliser GraphQL lorsque vous ne comprenez pas parfaitement comment le client utilise l'API. Lorsque vous utilisez GraphQL, vous n'avez pas besoin de définir un protocole strict au départ et pouvez progressivement créer votre API en fonction des commentaires des clients.
gRPC - Une technologie orientée performance
gRPC est une version évoluée de Remote Procedure Call lancée par Google en 2016. Il s'agit d'une solution légère qui offre des performances maximales avec un minimum de ressources.
gRPC suit une approche de communication basée sur un protocole. Cela nécessite que le client et le serveur aient un accord avant de pouvoir commencer à communiquer. gRPC utilise Protobuf, un langage déclaratif, pour créer des protocoles et générer du code compatible pour les clients et les serveurs dans le langage choisi.
gRPC prend en charge 4 méthodes de communication :
- Unaire : Le client envoie une requête et attend une seule réponse.
- Streaming du serveur : Le client envoie une requête et reçoit plusieurs réponses.
- Diffusion client : le client envoie plusieurs requêtes et attend une seule réponse.
- Streaming bidirectionnel : le client envoie plusieurs requêtes et reçoit plusieurs réponses.
Avantages de gRPC
- Open source. Les développeurs peuvent le modifier selon leurs besoins.
- Prend en charge plusieurs langages, notamment JavaScript, Java, C, C++, C#, Kotlin, Python, Go et PHP.
- Capable d'effectuer l'équilibrage de charge.
- Par rapport à l'API REST, elle utilise HTTP2 par défaut pour réduire la latence.
- Sérialisez les données au format binaire.
- Prend en charge le streaming en duplex intégral.
Inconvénients de gRPC
- Courbe d'apprentissage abrupte : par rapport à l'API REST traditionnelle, gRPC nécessite la maîtrise de nouveaux concepts et technologies, tels que les tampons de protocole et les flux.
- Mauvaise lisibilité : en raison de l'utilisation du codage binaire, les messages de gRPC ne sont pas aussi faciles à lire et à comprendre pour les humains que JSON ou XML.
- Difficile à déboguer : étant donné que les messages sont codés en binaire, le débogage d'un service gRPC peut être plus difficile que le débogage d'une API REST.
- Ne convient pas aux petites applications : pour les petites applications avec seulement quelques services et une petite quantité de données, gRPC peut être trop complexe et ajouter une surcharge inutile.
- Pas de prise en charge des navigateurs Web : étant donné que gRPC utilise le protocole HTTP/2 et que les navigateurs Web ne prennent actuellement pas en charge toutes les fonctionnalités du protocole HTTP/2, gRPC ne peut pas être utilisé dans les navigateurs Web.
Quand choisir gRPC
- Exiger un transfert de données efficace : étant donné que gRPC utilise un protocole binaire, il est plus rapide et plus léger que les protocoles texte tels que JSON et XML.
- Besoin d'une haute fiabilité : la couche de transport de gRPC basée sur le protocole HTTP/2 offre de nombreuses fonctionnalités, telles que le contrôle de flux, le multiplexage des connexions et la compression d'en-tête, qui peuvent améliorer la fiabilité et les performances.
- Besoin d'une communication multilingue efficace : gRPC prend en charge plusieurs langages de programmation et fournit des outils pour générer automatiquement du code, il n'est donc pas nécessaire d'écrire manuellement du code multilingue.
- Besoin de prendre en charge plusieurs types de requêtes et de réponses : gRPC prend en charge quatre types de méthodes de communication (unaire, streaming serveur, streaming client et streaming bidirectionnel), afin que vous puissiez choisir la méthode de communication qui convient le mieux à votre cas d'utilisation spécifique.
- Besoin d'une meilleure gestion des API : gRPC fournit de puissants outils de gestion des API, tels que gRPC-Gateway et Envoy, etc., qui peuvent améliorer la découvrabilité, la documentation et les tests des API.
gRPC peut être utilisé dans l'architecture de microservices pour gérer la communication entre les services, car il peut communiquer avec des services écrits dans différentes langues.
Conclusion
Le choix de REST, GraphQL et gRPC dépend de vos scénarios et besoins spécifiques. Les principes de base sont résumés comme suit :
- REST : REST convient aux API et services Web simples, tels que. opérations CRUD traditionnelles. Il est généralement plus facile à comprendre et à utiliser, et dispose d’un vaste écosystème de support et d’outils.
- GraphQL : GraphQL convient aux applications qui nécessitent de la flexibilité et des capacités de requête avancées. Si votre application doit regrouper des données provenant de plusieurs ressources ou a besoin d'un meilleur contrôle sur le format et la granularité des données, GraphQL est un bon choix.
- gRPC : gRPC convient aux applications qui nécessitent un transfert de données efficace et fiable. Si vous avez besoin d'une communication efficace entre plusieurs langages de programmation et souhaitez offrir des performances et une fiabilité supérieures, gRPC est un bon choix.
Cependant, REST, GraphQL et gRPC ne sont pas des choix mutuellement exclusifs. Dans des situations réelles, vous pouvez les combiner pour répondre à des besoins et à des scénarios spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!