乐趣区

关于api:如何在-Apinto-实现-HTTP-与-gRPC-的协议转换上

什么是 gRPC

gRPC 是由 google 开发的一个高性能、通用的开源 RPC 框架,次要面向挪动利用开发且基于 HTTP/2 协定规范而设计,同时反对大多数风行的编程语言。

gRPC 基于 HTTP/2 协定传输,而 HTTP/2 相比 HTTP1.x有以下劣势:

  1. 采纳二进制格局传输协定,反对多路复用;
  2. 反对通过同一个连贯发送多个并发的申请,反对流式传输;
  3. 服务器能够对客户端的一个申请发送多个响应;
  4. 对音讯头进行了压缩传输,可能节俭音讯头占用的网络流量。
    gRPC 应用 Protocol Buffers 作为序列化协定。

但同时,gRPC 也有本身的 局限性:

1)浏览器反对无限:

当下,不可能间接从浏览器调用 gRPC 服务。gRPC 大量应用 HTTP/2 性能,没有浏览器提供反对 gRPC 客户机的 Web 申请所需的管制级别。例如,浏览器不容许调用者要求应用的 HTTP/2,或者提供对底层 HTTP/2 框架的拜访。

2)不是人类可读的:

HTTP API 申请以文本模式发送,能够由人读取和创立。默认状况下,gRPC 音讯应用 protobuf 编码。尽管 protobuf 的发送和接管效率很高,但它的二进制格局是不可读的。protobuf 须要在 *.proto 文件中指定的音讯接口形容能力正确反序列化。须要额定的工具来剖析线路上的 Protobuf 无效负载,并手工编写申请。

若须要将外部 gRPC 作为接口凋谢给内部用户或浏览器调用,则须要有第三方代理解决 HTTP 协定转换成 gRPC 协定的问题。

为此,咱们在 Apinto 多协定反对的根底上,公布了 HTTPgRPC 插件:(eolinker.com:apinto:http_to_grpc)

在 Apinto 上 HTTP 转 gRPC 插件

Apinto 通过插件的形式反对 HTTP 协定转换成 gRPC 协定申请,在http_to_grpc 插件中实现了 HTTP 客户端 与 gRPC`Server` 通信时的协定转换及数据编解码工作,其通信的过程如下:

接下来通过一个残缺的示例向大家演示怎么构建一个 HTTP申请,并通过 Apinto 进行 HTTP协定 转换成 gRPC协定申请。在以下的示例中,咱们会将 Go 作为 gRPC`Server 服务端处理程序,应用 Eolink 作为 HTTP 客户端,发动 HTTP` 申请。

以下示例能够在 Apinto 仓库中获取。

配置 Protocol Buffer

1. 创立示例文件 msg.proto

该文件定义了示例音讯类型,咱们在这里定义了一个 HelloRequestHelloResponse 的 message。

2. 创立示例文件 service.proto

该文件定义了服务 Hello,引入了第一步创立的文件 msg.proto,定义了四个办法,蕴含了 一元 RPC、客户端流、服务端流、双向流 四种 gRPC 通信模式。

配置服务端程序

1. 创立主动生成 gRPC 文件脚本(grpc.sh)

该脚本将生成 gRPC 客户端 / 服务端调用相干代码,并将其存储到 demo_service目录下。

执行 grpc.sh,生成服务端 Go 原始音讯和服务 / 客户端存根。

2. 实现服务端解决程序接口

上述代码从新定义了 Hello 办法:

HelloRequest 中的 name 字段通过 HelloResponsemsg 字段封装成hello,%s 的后果返回

将申请的 Header 作为 gRPC 响应的 Trailer 头部返回

3. 定义 gRPC 服务端入口文件

在此处,gRPC 服务端开启了 gRPC 反射,配置 Apinto 网关时,可抉择绑定具体的 Protobuf 资源,也能够间接启用反射,动静获取 gRPC 服务端的 Protobuf 信息。

4. 编译 gRPC 服务器程序

上文介绍了如何结构 gRPC 示例服务器,下文将应用该示例服务器,联合 Apinto-Dashboard 来演示如何将 HTTP 协定转成 gRPC。

更多应用形式可到咱们的 Github 进一步理解:https://github.com/eolinker/apinto

退出移动版