【问题标题】:How to expose a gRPC service both as Protobuf and JSON如何将 gRPC 服务公开为 Protobuf 和 JSON
【发布时间】:2020-11-26 07:57:39
【问题描述】:

我们能否公开 gRPC 服务(在 JAVA 中)同时使用编码(Protobuf 和 JSON)?就像我们可以在 HTTP+REST 中做的那样,服务器创建并设置响应头基础客户端 Content-Type : (application/json or application/xml or application/proto)。

【问题讨论】:

标签: grpc grpc-java


【解决方案1】:

gRPC 支持流式传输,在 HTTP/1 中无法实现。无法将 gRPC 服务作为经典 HTTP+REST 提供。

Twirp 应该非常接近您想要的。它使用纯 HTTP/1,从 .proto 文件中的服务定义生成。它只支持一元方法。 https://twitchtv.github.io/twirp/docs/intro.html

如果您希望通过网络浏览器使用您的服务,则 gRPC-web 是一种替代方案。它支持一元和服务器流方法。最重要的是,您可以使用 envoy 代理将现有 gRPC 服务作为 gRPC-web 提供。

【讨论】:

  • 或者我们可以在gRPC服务中有JSON和ProtoBuf作为response Type,那么gRPC服务可以根据客户端Content-Type返回各自的response(JSON/Protobuf)。
  • Twirp 客户端可以请求 JSON 或 Protobuf。然后,Twirp 服务器应该以正确的类型响应。见twitchtv.github.io/twirp/docs/spec_v7.html#requests
猜你喜欢
  • 2013-04-04
  • 2022-01-28
  • 2017-11-24
  • 2013-02-13
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 2012-04-10
相关资源
最近更新 更多