登录
首页 >  Golang >  Go问答

接收数组的 Proto RPC

来源:stackoverflow

时间:2024-02-28 20:51:23 257浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《接收数组的 Proto RPC》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我使用 rpc 构建了一个由 proto 文件生成的 rest 服务。 我成功接收到一个事件,如下所示:

rpc postevent(event) returns (google.protobuf.empty) {
    option (google.api.http) = {
      post: "/myep"
      body: "*"
    };
  }

它可以工作 - 将 json 对象转换为 event{} 结构。

我的问题是,当我想要接收一组 event{} 时如何做同样的事情。

这可行:

message EventsWrapper {
  repeated Event events = 1;
}
rpc PostEvents(EventsWrapper) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      post: "/myEP"
      body: "*"
    };
  }

但是它会期望一个像这样的 json:

{"事件":[{},..,{}]}

虽然我只收到:

[{},..,{}]

我无法控制接听电话的方式。有什么想法可以调整我的代码来处理这样的数组调用吗?


正确答案


如果您需要接受 json 数组,并且您使用的 grpc 转码实现支持它,则可以使用 body 属性来指定映射到请求正文的重复字段,而不是使用 *。 p>

引用自Google HttpRule API documentation

换句话说,您可以将您的服务定义为:

message EventsWrapper {
  repeated Event events = 1;
}
// ...
  rpc PostEvents(EventsWrapper) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      post: "/myEP"
      body: "events"
    };
  }

我相信至少有 gRPC-Gateway(从 PR #712 开始)支持这一点,也可能有 Envoy ProxygRPC-JSON transcoder 支持。后者还支持 json 数组和流式 grpc 方法之间的转换,因此如果您定义 rpc postevent(stream event) 返回 (google. protobuf.empty) 方法,envoy 将期望请求中有一个 event 对象数组(甚至可能在翻译后的消息到达时流式传输)。

今天关于《接收数组的 Proto RPC》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>