微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloud Endpoints 支持 proto3 JSON 转码期间的任何类型

如何解决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 举报,一经查实,本站将立刻删除。