Ich lese diese Erklärung von GRPC und dieses Diagramm ist von Interesse:
Wie funktioniert die Transportschicht? Wenn es über das Netzwerk ist ... warum wird es als RPC bezeichnet? Noch wichtiger ist, wie unterscheidet sich dies von REST, das eine API für die Service-Schicht implementiert (die Klasse im Client, die Methoden hat, die eine http-Anfrage stellen)?
Antworten:
Die Transportschicht arbeitet mit HTTP / 2 über TCP / IP. Es ermöglicht Verbindungen mit geringerer Latenz (schneller), die eine einzelne Verbindung von Client zu Server nutzen können (wodurch die Verbindung effizienter genutzt wird und die Serverressourcen effizienter genutzt werden können.
HTTP / 2 unterstützt auch bidirektionale Konnektivität und asynchrone Konnektivität. Auf diese Weise kann der Server effizient Kontakt mit dem Client aufnehmen, um Nachrichten zu senden (asynchrone Antwort / Benachrichtigungen usw.)
Während sowohl REST als auch gRPC Client / Server-Stubs generieren können (unter Verwendung von Swagger für REST), verfügt REST über eine begrenzte Anzahl von primären Funktionsaufrufen (oder Verben):
Während gRPC Sie jede Art von Funktionsaufrufen definieren können, einschließlich synchron / asynchron, unidirektional / bidirektional (Streams) usw.
Mit gRPC ruft der Client eine lokale Methode auf. Für den Programmierer sieht es so aus, als würden Sie einen lokalen Anruf tätigen, aber die zugrunde liegende Schicht (der automatisch generierte Client-Stub) sendet den Anruf an den Server. Für den Server sieht es so aus, als ob seine Methode lokal aufgerufen wurde.
gRPC kümmert sich um alle zugrunde liegenden Installationen und vereinfacht das Programmierparadigma. Für einige engagierte REST-Puristen scheint dies jedoch eine Überkomplikation zu sein. YMMV
quelle
Für REST ist weder JSON noch HTTP / 1.1 erforderlich
Sie können trivial einen RESTful-Dienst erstellen, der Protobuf-Nachrichten (oder was auch immer) über HTTP / 2 sendet
Sie können RESTful-Services erstellen, die JSON über HTTP / 2 senden
Sie können RESTful-Services erstellen, die Protobuf-Nachrichten über HTTP / 1.1 senden
RESTful-Services sind kein "Hack" über HTTP / xx, sondern Services, die den grundlegenden Architekturprinzipien folgen, die jede Version von HTTP erfolgreich gemacht haben (wie die Cachefähigkeit von GET-Anforderungen und die Wiederspielbarkeit von PUT-Anforderungen).
gRPC, SOAP et al. Alle sind eher wie Hacks - Hacks über HTTP, um RPC-ähnliche Dienste über HTTP zu tunneln, um Firewall- und Middlebox-Einschränkungen zu umgehen. Das ist nicht unbedingt eine schlechte Sache. Manchmal möchten Sie vielleicht einen RPC-ähnlichen Dienst anstelle eines REST-Dienstes, und wir müssen in einer Welt leben, in der Middleboxen schwer zu ersetzen sind.
Wenn Sie keine Zeit haben, sich über die tatsächliche Definition von REST zu informieren: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Es gibt immer die TLDR; Version auf Wikipedia:
https://en.wikipedia.org/wiki/Representational_state_transfer
Wenn Sie einen Service im RPC-Stil benötigen, ist gRPC sicher großartig. Wenn Sie im Web leben möchten oder alle Vorteile eines RESTful-Style-Service nutzen möchten, erstellen Sie einen RESTful-Style-Service. Und wenn es zu langsam ist, Daten im JSON-Format in Ihrem erholsamen Service zu serialisieren / zu deserialisieren, ist es vollkommen in Ordnung, Protobuf oder was auch immer zu verwenden.
Wenn gRPC eine Version 2 von irgendetwas ist, ist es eine Version 2 von SOAP. Eine, die nicht schrecklich ist, wie SOAP.
Und nein, Sie können in Ihrer GET-Anfrage nicht einfach "irgendeine Funktion aufrufen" und haben einen RESTful-Service.
Eine letzte Sache: Wenn Sie Protobufs über einen RESTful-Service verwenden möchten, machen Sie es bitte richtig, indem Sie die Header des Inhaltstyps usw. verwenden. Damit können Sie sowohl JSON als auch Protobuf problemlos unterstützen.
Tritt jetzt von meiner SOAP-Box zurück ..;)
quelle
Der größte Vorteil von gRPC gegenüber REST ist die Unterstützung von HTTP / 2 gegenüber Opa HTTP 1.1. Dann ist der größte Vorteil von HTTP / 2 gegenüber HTTP 1.1: "HTTP / 2 ermöglicht es dem Server, Inhalte zu" pushen "...
quelle