如何用 postman grpc 调用 API
postman
https://www.postman.com/ postman 想必大家已经很熟悉了, 平时用得比较多的是 HTTP call 测试。但有的服务,只有 grpc, 没有 http 方法, 测试的时候别无选择.
参考官方的文档:https://learning.postman.com/docs/sending-requests/grpc/grpc-client-overview/
什么是 RPC
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许一台计算机程序调用另一台计算机上的程序,而不需要程序员显式编写远程调用的代码。通过 RPC,程序员可以编写分布式应用程序,使得程序像运行在本地一样简单。
RPC 框架一般分为三个部分:客户端、服务器端和协议。客户端调用本地的代理程序,代理程序负责将调用转换为网络消息,然后发送给服务器端。服务器端接收到消息后,解析消息,调用本地的程序执行对应的操作,然后将结果返回给客户端。协议规定了客户端和服务器端之间的通信格式和方式,包括消息的结构、编码方式、传输协议等。
RPC 框架有很多种,常见的包括 gRPC、Thrift、Dubbo 等,它们都提供了类似的功能,使得开发人员可以快速地构建分布式应用程序。
总之,RPC 是一种计算机通信协议,可以让程序像本地程序一样调用远程程序,它可以帮助开发人员快速构建分布式应用程序。
什么是 gRPC
gRPC(g stands for Google)是一种高性能、开源、通用的远程过程调用(RPC)框架,由 Google 开发,支持多种编程语言。gRPC 基于 Protocol Buffers(protobuf)序列化协议开发,提供了比传统的 HTTP/REST API 更快、更可靠和更高效的远程服务调用方式。
gRPC 的核心设计理念是定义服务,生成客户端和服务器端的 stub(存根),使得客户端和服务器端可以像调用本地方法一样调用远程方法,而且支持多种编程语言,包括 C、C++、Java、Python、Go、Ruby、Node.js 等。在 gRPC 中,客户端只需要通过服务定义文件来生成相应的客户端 stub,然后就可以像调用本地方法一样调用远程服务,非常方便。
gRPC 支持四种不同类型的服务方法,分别是:
- 单向流:客户端发送一组请求到服务器端,但不等待回应。
- 双向流:客户端和服务器端可以同时发送多组请求和回应。
- 服务端流:客户端发送一组请求到服务器端,等待服务器端返回多组回应。
- 客户端流:客户端发送多组请求到服务器端,等待服务器端返回一组回应。
除此之外,gRPC 还提供了许多功能,例如支持 TLS/SSL 安全传输、支持客户端和服务器端的流量控制、支持多语言扩展等。
总之,gRPC 是一种高性能、开源、通用的 RPC 框架,可以支持多种编程语言,提供了比传统的 HTTP/REST API 更快、更可靠和更高效的远程服务调用方式。
什么是 Protobuf
Protobuf,全称为 Protocol Buffers,是一种语言无关、平台无关、可扩展的序列化数据格式,由 Google 公司开发。它支持多种编程语言,包括 C++、Java、Python 等,可以在不同的系统之间进行数据交换和存储。
与 XML 和 JSON 等数据格式相比,Protobuf 具有更高的序列化和反序列化效率、更小的数据体积以及更简单的数据结构定义。使用 Protobuf 可以帮助开发人员轻松地定义数据结构,然后使用自动生成的代码来进行序列化和反序列化。
在实际应用中,Protobuf 主要用于分布式应用程序中的数据传输和存储,例如在 Google 内部的各种系统和服务中就广泛使用了 Protobuf。
总之,Protobuf 是一种语言无关、平台无关、可扩展的序列化数据格式,具有更高的效率和更小的数据体积,可以帮助开发人员轻松地定义数据结构并进行数据传输和存储。
开始实验
先来看一看这个 pb 文件
1 | syntax = "proto3"; |
需要注意的地方是 import 的路径, 比如在 goland IDE 里面,也需要设置,如下图所示
在 postman 里面导入了 Protocol Buffers 文件后,可以直接点击橙色的 next ,如果有报错,则说明缺少了依赖,需要导入依赖的包的路径。和上图类似
因为我们本地的服务监听在 8087, 所以地址就填写 localhost:8087 , 可以看到是两个蓝色的箭头双向流:
我们先 add 一条记录
然后再查询所有的
需要注意的地方
- 注意时间的格式 https://protobuf.dev/reference/php/api-docs/Google/Protobuf/Timestamp
protected $seconds Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive. 可以在这个网站转换 https://www.epochconverter.com/
protected $nanos Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.1
google.protobuf.Timestamp startTime = 9