对于将 HTTP/JSON 转码为 gRPC,如何为枚举指定查询参数

Posted

技术标签:

【中文标题】对于将 HTTP/JSON 转码为 gRPC,如何为枚举指定查询参数【英文标题】:For Transcoding HTTP/JSON to gRPC, how to specify query parameter for enum 【发布时间】:2019-12-16 22:44:01 【问题描述】:

我已经为我的服务设置了 http-grpc 转码(请参阅https://cloud.google.com/endpoints/docs/grpc/transcoding)。它有一个 rpc DoSomething 定义如下:

service MyService 
  // Determine experiments and treatments for a user across multiple namespaces.
  rpc DoSomething (RpcRequest) returns (RpcResponse) 
    option (google.api.http) = 
      get: "/my-service/do-something"
    ;
  ;


message RpcRequest 
  // Metadata associated with this request.
  RequestContext request_context = 1;


message RequestContext 

  // DeviceID for identifying user.
  string device_id = 1;

  // Just added this, but don't know how to pass in this value as query parameter!
  Country country = 2;



// Just added this
enum Country 
  UNKNOWN_COUNTRY = 0;
  US = 1;
  CA = 2;
  AF = 3;
  AX = 4;
  // ... etc.

当我第一次实现这个时,RequestContext 只有 device_id,所以这个 REST URL 工作正常: GET https://example.com/my-service/do-something?request_context.device_id=abc123。它执行了操作并按预期返回了正确的响应。

现在我需要将枚举country 添加到RequestContext,但我不确定如何在 URL 的查询字符串中传递该信息。我试过GET https://example.com/my-service/do-something?request_context.device_id=abc123&request_context.country=US,但这并没有将国家转发到GRPC服务;它只是将默认值 0(即“UNKNOWN_COUNTRY”)分配给country。我没有在 Google 的文档中找到任何关于此的指导。

在查询参数中指定枚举的正确方法是什么?提前致谢!

【问题讨论】:

【参考方案1】:

无论在查询参数或 json 正文中,它都应该将枚举值作为 proto 文件中定义的字符串传递。您也可以将枚举值作为整数传递。

您可能有一些拼写错误和尾随空格,导致转换代码找不到匹配值。如果不匹配,枚举值默认为 0。

【讨论】:

以上是关于对于将 HTTP/JSON 转码为 gRPC,如何为枚举指定查询参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有请求正文的 HTTP DELETE 转码为 gRPC

如何使用Babel将ES6转码为ES5

如何使用Babel将ES6转码为ES5

python2 将TXT文本转码为utf-8

如何使用Babel将ES6转码为ES5?

RSA 非对称加密,私钥转码为pkcs8 错误总结