当前位置: 首页 > 知识库问答 >
问题:

JSON转码期间,云endpoint支持proto3任何类型

皇甫飞飙
2023-03-14

我们正在探索google云endpoint,以将gRPC服务公开为REST API。这些服务使用包含任何类型字段的proto3消息。

云endpoint的可扩展服务代理(ESP)是否支持嵌入自定义消息类型的任何字段的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?如果需要,是否有办法做到这一点?

共有1个答案

仲涵亮
2023-03-14

我还没有尝试将云endpoint与包含任何的消息一起使用,但我认为不太可能将代理配置为转码包封的消息。这是可能的,但我认为即使是特使也不太可能启用它(但是,我也不知道)。

目前还不清楚如果这起作用,结果REST API的语义学会是什么:

rpc AddGeneric (AddGenericRequest) returns (AddGenericResponse) {}

可能会变成:

post: "v1alpha/add"
body: "generic"

使用任何的类型将包括一个字节数组和一个字符串描述符,可以理解为REST API,但可能是您问题背后的原因,需要REST客户端对封装的消息进行解码。

但是,如果转码是递归地转码封装的消息,那么这个(!)方法需要定义多个可能的消息体类型:

post: "v1alpha/add"
body: ["type-a" | "type-b" | "type-c" | ... ]

这虽然方便,但似乎有点不安宁。代码转换不需要生成RESTful API,但它可以解释所涉及的复杂性。

为了得到明确的答复,我建议您在Google维护的用于ESPv2的GitHub repo上提出一个问题。那里的人反应迅速,乐于助人。

 类似资料:
  • 问题内容: 有什么优雅的方法可以使Python JSON编码器支持日期时间?一些第三者模块还是容易破解? 我正在使用tornado的数据库包装程序从db获取一些行以生成json。查询结果包括一个常规的MySQL时间戳列。 令人讨厌的是,Python的默认json编码器不支持自己的日期时间类型,这种类型在所有类型的数据库查询中都很常见。 我不想修改Python自己的json编码器。有什么好的做法吗?

  • 有没有什么优雅的方法使Python JSON编码器支持datetime?一些第三方模块或简易黑客? 我正在使用tornado的数据库包装器从db获取一些行来生成一个json。查询结果包括一个常规的MySQL时间戳列。 Python默认的json编码器不支持自己的日期时间类型,这在各种数据库查询中都很常见,这很烦人。 我不想修改Python自己的json编码器。有什么好的做法吗?谢谢! ps:我通过

  • 安装 protoc-gen-doc 简单遵循安装要求即可: https://github.com/estan/protoc-gen-doc 安装完成之后的protoc是2.5.0版本,无法处理proto3的文件。因此我们需要升级替换protoc为v3.0.0版本。 升级protoc 使用预编译版本 下载 请先在 protobuf 的 发布页面 中找到对应版本的 download ,然后下载对应版本

  • 问题内容: 我正在使用http://www.json.org/java/index.html此处提供的JSON库将必须转换的JSON字符串转换为CSV。但是我有一个问题是,转换后键的顺序丢失了。 这是转换代码: 结果如下: 虽然我期望保持键的顺序: 有什么办法可以使用此库获得此结果吗?如果不是,是否有其他库可以提供保持键顺序在结果中的功能? 问题答案: 解决了。 我使用了https://code.

  • 问题内容: 我正在使用http://www.json.org/java/index.html此处提供的JSON库将必须转换的JSON字符串转换为CSV。但是我的问题是,转换后键的顺序丢失了。 这是转换代码: 这是“ someString”的内容: 结果如下: 我期望保持键的顺序: 有什么办法可以使用此库获得此结果吗?如果不是,是否还有其他库可以提供在结果中保留键顺序的功能? 问题答案: 解决了。

  • Go内置了对JSON数据的编码和解码,这些数据的类型包括内置数据类型和自定义数据类型。 package main import "encoding/json" import "fmt" import "os" // 我们使用两个结构体来演示自定义数据类型的JSON数据编码和解码。 type Response1 struct { Page int Fruits []string