【问题标题】:Can gRPC method return a message with a field that could be string or null?gRPC 方法可以返回包含字符串或空字段的消息吗?
【发布时间】:2023-04-11 08:12:02
【问题描述】:

我正在设计一个用 Go 编写的 gRPC 服务。

在 gRPC 服务前面是 Envoy,它将传入的 HTTP 请求转换为 gRPC,并将 gRPC 响应转换为 JSON。

此应用程序的要求是具有返回以下 JSON 对象的端点:

{
    my_id: "AAA"
}

我可以像这样在 Go 中非常简单地模拟这个响应:

// A MyResponse object.
message MyResponse {
  // contents is a list of contents.
  string my_id = 1;
}

但我的要求是有时 my_id 可能为空。在这种情况下,我想取回以下 JSON:

{
    my_id: null
}

是否可以修改MyResponse 使得my_id 在返回的JSON 对象中可以是字符串或空值?如果是这样,怎么做?如果不是,这在 gRPC 的设计上是不是一个很大的差距?

【问题讨论】:

    标签: go protocol-buffers grpc envoyproxy grpc-go


    【解决方案1】:

    我建议你使用包google.protobufStringValue字段:

    字符串的StringValue 包装消息。

    StringValue 的 JSON 表示是 JSON 字符串。

    所以在你的 proto 文件中,你应该导入:

    import "google/protobuf/wrappers.proto";
    

    然后作为例子:

      google.protobuf.StringValue name = 2;
    

    对于处理值,您可以检查wrappers.StringValue github.com/golang/protobuf/ptypes/wrappers 包的类型和google.golang.org/protobuf/types/known/wrapperspb repo 的助手。

    【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多