对于将 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,如何为枚举指定查询参数的主要内容,如果未能解决你的问题,请参考以下文章