109 votes

En quoi GRPC est-il différent de REST?

Je suis en train de lire cette explication de GRPC et de ce diagramme est de l'intérêt:

enter image description here

Comment fonctionne le transport de la couche de travail? Si c'est sur le réseau... pourquoi est-il appelé RPC? Plus important encore, comment est-ce différent de REPOS qui implémente une API pour le service de la couche (la classe dans le client qui a des méthodes qui font une requête http)?

118voto

mmccabe Points 1200

La couche de transport des œuvres à l'aide de HTTP/2 sur le dessus de TCP/IP. Il permet de réduire les temps de latence (plus rapide) connexions qui peuvent profiter d'une connexion à partir du serveur vers le client (ce qui permet une utilisation plus efficace de connexion et peut entraîner une utilisation plus efficace des ressources du serveur.

HTTP/2 prend également en charge bidirectionnelle de connectivité et asynchrone de la connectivité. Il est donc possible pour le serveur efficace de prendre contact avec le client pour envoyer des messages (async réponse/notifications, etc..)

Alors que, à la fois de REPOS et de gRPC peut générer client/serveur talons (en utilisant quelque chose comme swagger pour le REPOS), le REPOS dispose d'un nombre limité de primaire "fonction" appels (ou verbes):

+-----------+----------------+
| Verbe HTTP | CRUD |
+-----------+----------------+
| OBTENIR | Lire |
| METTRE | mise à Jour/Remplacer |
| PATCH | mise à Jour/Modifier |
| DELETE | Supprimer |
+-----------+----------------+

alors que gRPC vous pouvez définir n'importe quel type d'appels de fonction, y compris synchrone/asynchrone, uni-direction/bidirectionnel(les ruisseaux), etc..

À l'aide de gRPC le client effectue un appel à une méthode local. Pour le programmeur, il semble que vous faites un appel local, mais la couche sous-jacente (auto-généré stub client) envoie l'appel au serveur. Pour le serveur, il ressemble à sa méthode a été appelée localement.

gRPC prend soin de tous les sous-jacents de la plomberie et simplifie le paradigme de programmation. Cependant, pour certains dédié RESTE les puristes, cela peut sembler comme une complication. YMMV

51voto

user2077221 Points 1

Le REPOS ne nécessite pas de JSON ou HTTP/1.1

Vous pouvez trivialement construire un service RESTful qui envoie protobuf messages (ou autre) sur HTTP/2

Vous pouvez construire des services RESTful qui envoient JSON sur HTTP/2

Vous pouvez construire des services RESTful qui envoient protobuf messages sur HTTP/1.1

Services RESTful ne sont pas un "hack" sur le dessus de HTTP/x.x, ce sont des services suivants fondamentaux d'architecture qui ont fait une version de HTTP succès (comme la cachabilité des requêtes GET et la rejouabilité de METTRE les demandes).

gRPC, du SAVON, et. al sont plus comme des hacks - hacks sur le dessus de HTTP pour le tunnel de style RPC pour les services HTTP, pour contourner les pare-feu et middlebox restrictions. Ce n'est pas nécessairement une mauvaise chose. Parfois, vous pourriez voulez un style RPC service plutôt qu'à un RESTE un, et nous dois vivre dans un monde où middleboxes sont difficiles à remplacer.

Si vous n'avez pas le temps de lire sur la définition même de REPOS: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Il y a toujours la TLDR; version sur wikipedia:

https://en.wikipedia.org/wiki/Representational_state_transfer

Si vous avez besoin d'un style RPC service, bien sûr, gRPC est grande. Si vous voulez vivre sur le web, ou si vous voulez tous les avantages qui viennent avec une bonne style de service, puis construire une RESTful service de style. Et si il est trop lent pour sérialiser/désérialiser des données au format JSON dans votre service restful, il est parfaitement OK pour utiliser protobuf ou quoi que ce soit.

Si gRPC est une version 2 de quoi que ce soit, c'est une version 2 de SAVON. Celui qui n'est pas terrible, comme le SAVON.

Et, non, vous ne pouvez pas simplement "appel une fonction" dans votre requête GET et avoir un service RESTful.

Une dernière chose: si tu vas en utiliser protobufs plus d'un service RESTful, merci de le faire à droite, en utilisant le type de contenu des en-têtes, etc. Avec cela, vous pouvez facilement prendre en charge à la fois JSON ET protobuf.

Démissionné de ma boîte à SAVON maintenant.. ;)

4voto

Denis Wang Points 353

Le principal avantage de gRPC par rapport à REST est sa prise en charge de HTTP / 2 par rapport au grand-père HTTP 1.1. Le principal avantage de HTTP / 2 par rapport à HTTP 1.1 est que "HTTP / 2 permet au serveur de" transmettre "du contenu" ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X