如何解决Cloud Endpoints 支持 proto3 JSON 转码期间的任何类型
我们正在探索 google Cloud Endpoints 以将 gRPC 服务公开为 REST API。这些服务使用包含 Any
类型字段的 proto3 消息。
Cloud Endpoints 的可扩展服务代理 (ESP) 是否支持嵌入自定义消息类型的 Any
字段的 JSON 转码?开箱即用,好像不支持这个,返回如下错误
{
"code": 13,"message": "Type 'type.acmeapis.com/acme.v1.Augmentation' cannot be found.","details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo","stackEntries": [],"detail": "internal"
}
]
}
这是否需要在 ESP 上配置 TypeRegistry,如果需要,有没有办法做到这一点?
解决方法
我没有尝试将 Cloud Endpoints 用于包含 Any
的消息,但我认为代理不太可能被配置为对封装的消息进行转码。这是可能,但我认为即使是 Envoy 也不太可能启用此功能(但我也不知道)。
如果这可行的话,目前还不清楚生成的 REST API 的语义是什么:
rpc AddGeneric (AddGenericRequest) returns (AddGenericResponse) {}
成为,也许:
post: "v1alpha/add"
body: "generic"
使用 Any
的类型将是由字节数组和字符串描述符组成的类型,这可以理解为 REST API,但大概是您的问题背后的原因,需要 REST 客户端然后解码封装的消息。
但是,如果转码要递归地转码封装的消息,则需要使用多种可能的消息正文类型定义这个 (!) 方法:
post: "v1alpha/add"
body: ["type-a" | "type-b" | "type-c" | ... ]
虽然方便,但似乎有点不符合 RESTful。没有要求转码产生 RESTful API,但它可以解释所涉及的复杂性。
要获得明确答复,我建议您在 Google 维护的 ESPv2 GitHub 存储库上提出 issue。那里的人反应迅速且乐于助人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。