Answers:
传输层使用TCP / IP之上的HTTP / 2进行工作。它允许较低的延迟(更快)的连接,这些连接可以利用从客户端到服务器的单个连接(这可以更有效地利用连接,并可以更有效地利用服务器资源。
HTTP / 2还支持双向连接和异步连接。因此,服务器可以有效地与客户端联系以发送消息(异步响应/通知等)。
尽管REST和gRPC都可以生成客户端/服务器存根(使用诸如svagger这样的REST),但是REST具有有限的一组主要“函数”调用(或动词):
+ ----------- + ---------------- + | HTTP动词| CRUD | + ----------- + ---------------- + | GET | 阅读| | 放置| 更新/替换| | 补丁| 更新/修改| | 删除 删除| + ----------- + ---------------- +
而gRPC您可以定义任何类型的函数调用,包括同步/异步,单向/双向(流)等。
客户端使用gRPC调用本地方法。对于程序员来说,您好像在进行本地调用,但是底层(自动生成的客户端存根)将调用发送到服务器。对于服务器来说,它的方法看起来像是在本地调用的。
gRPC负责所有底层的管道,并简化了编程范例。但是,对于一些敬业的REST纯粹主义者,这似乎过于复杂。青年汽车
REST不需要JSON或HTTP / 1.1
您可以轻松构建一个通过HTTP / 2发送protobuf消息(或其他任何消息)的RESTful服务
您可以构建通过HTTP / 2发送JSON的RESTful服务
您可以构建RESTful服务,以通过HTTP / 1.1发送protobuf消息
RESTful服务不是HTTP / xx之上的“黑客”,它们是遵循基本体系结构原理的服务,这些原理已使任何版本的HTTP成功(例如GET请求的可缓存性和PUT请求的可重播性)。
gRPC,SOAP等。Al更像是骇客-HTTP之上的骇客通过HTTP隧道传送RPC样式的服务,从而绕过防火墙和中间盒限制。那不一定是坏事。有时,您可能希望使用RPC样式的服务而不是REST服务,而我们必须生活在一个很难替换中间箱的世界中。
如果您没有时间阅读REST的实际定义,请访问:https : //www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
总是有TLDR。维基百科上的版本:
https://zh.wikipedia.org/wiki/Representational_state_transfer
如果您需要RPC样式的服务,那么gRPC很好。如果您想生活在Web上,或者想要RESTful样式服务附带的所有好处,请构建RESTful样式服务。而且,如果在您的静态服务中以JSON格式对数据进行序列化/反序列化太慢,则可以使用protobuf或其他任何方法。
如果gRPC是任何东西的版本2,那么它就是SOAP的版本2。一种不可怕的东西,例如SOAP。
而且,不,您不能只是在GET请求中“调用任何函数”,而拥有RESTful服务。
最后一件事:如果要在RESTful服务上使用protobuf,请使用内容类型标头等正确执行操作。这样,您就可以轻松支持JSON和protobuf。
现在从我的SOAP框退出。.;)
与REST相比,gRPC的最大优点是其对HTTP / 2的支持超过了HTTP 1.1。那么HTTP / 2相对于HTTP 1.1的最大优势是,“ HTTP / 2允许服务器“推送”内容” ...