gRPC-Web:替代REST的gRPC的Javascript库包
栏目: JavaScript · 发布时间: 6年前
内容简介:gRPC-Web是一个JavaScript客户端库,使Web应用程序能够直接与后端gRPC服务通信,而不需要HTTP服务器充当中介。这意味着你现在可以通过使用需要明确的是,REST应用程序
gRPC-Web是一个JavaScript客户端库,使Web应用程序能够直接与后端gRPC服务通信,而不需要HTTP服务器充当中介。这意味着你现在可以通过使用 .proto 文件定义客户端 和 服务器端数据类型和服务接口,轻松构建真正的端到端gRPC应用程序架构。因此,gRPC-Web为整个REST开发Web范例提供了一个引人注目的新选择。
需要明确的是,REST应用程序 本身 没有任何 问题 。使用REST API服务器构建了大量非常成功的应用程序,但是如果这些服务器使用非HTTP协议与后端服务进行通信,那么需要进行大量转换gRPC-Web的好处从“技术”上解决这个问题。
使用gRPC-Web的优点
随着时间的推移,gRPC-Web将提供更广泛的功能集。但我可以看到它从一开始就提供了一些巨大的胜利:
- 端到端gRPC - 如上所述,使用gRPC-Web,可以正式从堆栈中删除REST组件并将其替换为纯gRPC,从而使能够使用Protocol Buffers创建 整个 RPC管道。
- 前端和后端团队之间更紧密的协调- 使用Protocol Buffers定义整个RPC管道,不再需要将“微服务团队”与“客户端团队”分离。客户端 - 后端交互只是一个gRPC层。
- 轻松生成客户端库- 使用gRPC-Web,意味着后端服务器是gRPC服务器而不是HTTP服务器,这意味着您的所有服务都是客户端库也可以是gRPC库。需要Ruby,Python,Java和其他4种语言的客户端库吗?您不再需要为所有这些客户端编写HTTP客户端。
下面是一个Protocol Buffer格式定义:
syntax = “proto3”; <b>package</b> todos; message Todo { string content = 1; bool finished = 2; } message GetTodoRequest { <b>int</b>32 id = 1; } service TodoService { rpc GetTodoById (GetTodoRequest) returns (Todo); }
可以使用 protoc 命令行 工具 根据这个 .proto 定义使用生成CommonJS的客户端代码:
protoc echo.proto \
--js_out = import_style = commonjs:./ output \
--grpc-web_out = import_style = CommonJS的:./输出
现在从后端gRPC服务器获取TODO列表可以这么简单:
<b>const</b> {GetTodoRequest} = require(‘./todos_pb.js’); <b>const</b> {TodoServiceClient} = require(‘./todos_grpc_web_pb.js’); <b>const</b> todoService = <b>new</b> proto.todos.TodoServiceClient(‘http:<font><i>//localhost:8080’);</i></font><font> <b>const</b> todoId = 1234; <b>var</b> getTodoRequest = <b>new</b> proto.todos.GetTodoRequest(); getTodoRequest.setId(todoId); <b>var</b> metadata = {}; <b>var</b> getTodo = todoService.getTodoById(getTodoRequest, metadata, (err, response) => { <b>if</b> (err) { console.log(err); } <b>else</b> { <b>const</b> todo = response.todo(); <b>if</b> (todo == <b>null</b>) { console.log(`A TODO with the ID ${todoId} wasn’t found`); } <b>else</b> { console.log(`Fetched TODO with ID ${todoId}: ${todo.content()}`); } } }); </font>
同样,没有HTTP代码或方法,没有JSON解析,没有头Header协商。您声明了数据类型和服务接口,并且gRPC-Web摘录了所有“hard wiring”样板代码,为您提供了一个干净且人性化的API(基本上与当前 用于gRPC API的Node.js相同的API ,刚刚转移到客户端)。
在后端,gRPC服务器可以用任何支持gRPC的语言编写,包括Go,Java,C ++,Ruby,Node.js等等。最后一块拼图是服务代理。从一开始,gRPC-Web将支持 Envoy 作为默认服务代理,它具有内置的 envoy.grpc_web 过滤器,只需几行复制和可配置配置即可应用。
以上所述就是小编给大家介绍的《gRPC-Web:替代REST的gRPC的Javascript库包》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Postwoman 替代 Postman
- JSX的替代品[译]
- [译]JSX的替代品
- fetch使用,ajax替代方案
- sharedata 的替代品:datasheet
- 替代 Docker 的五种容器选择
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。