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


以上所述就是小编给大家介绍的《gRPC-Web:替代REST的gRPC的Javascript库包》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序化广告实战

程序化广告实战

吴俊 / 机械工业出版社 / 2017-8-15 / 79.00元

中国程序化广告领域领袖级专家,私有化程序购买领域的布道者的一线实战笔记,宋星等近20位专家联袂推荐。从业务和技术双重视角系统讲解程序化广告的理论、知识、实践方法和关键要点。一起来看看 《程序化广告实战》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器