【问题标题】:How to properly format response object based on protobuf grpc specification如何根据 protobuf grpc 规范正确格式化响应对象
【发布时间】:2019-07-25 12:15:53
【问题描述】:

我有以下 protobuf 定义:

service MyService {
    rpc ServiceMethod (ServiceMethodRequest) returns (ServiceMethodResponse) {}
}

message ServiceMethodRequest{
    string requestParam = 1;
}
message ServiceMethodResponse{
    Error error = 1;
    SomeObjectList data = 2;
}
message Error{
    string code = 1;
    string errorMessage = 2;
}

message SomeObject {
    string myobject = 1;
}
message SomeObjectList {
    repeated SomeObject myobjects = 1;
}

如您所见,我想返回格式化响应,因此我的 API 有一些标准化的响应方式。我这样格式化我的回复(这是 JSON 格式,因为可读性):

{"error":{"code":"-1","errorMessage":""},"data":{"myobjects":[{"myobject":"some string"},{"myobject":"another string"}]}}

但在客户端我不断得到:

{ Error: 2 UNKNOWN: Unknown Error
    at Object.exports.createStatusError (.../node_modules/grpc/src/common.js:91:15)
    at Object.onReceiveStatus (.../node_modules/grpc/src/client_interceptors.js:1204:28)
    at InterceptingListener._callNext (.../node_modules/grpc/src/client_interceptors.js:568:42)
    at InterceptingListener.onReceiveStatus (.../node_modules/grpc/src/client_interceptors.js:618:8)
    at callback (.../node_modules/grpc/src/client_interceptors.js:845:24)
  code: 2,
  metadata: Metadata { _internal_repr: {}, flags: 0 },
  details: 'Unknown Error' }

当我尝试 console.log 响应对象时。

我做错了什么? 另外,有没有关于 grpc 的好书和一些例子(C、C#、Java、Python、JavaScript)? 提前致谢!

【问题讨论】:

  • 看起来应该可以工作...忘记这里的细节,非常简单的请求/响应 RPC 调用是否有效?但总的来说:您格式化响应 - gRPC 会;这里的服务器在说 gRPC 吗?
  • 是的,我没有格式化响应,我只是发送了对象,这里我只是用 JSON 编写了它,因为我认为它更具可读性。好吧,当我只返回 SomeObjectList 时它就起作用了。

标签: protocol-buffers grpc grpc-node


【解决方案1】:

server.js

callback(null, message);

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多