【发布时间】:2022-07-21 23:06:37
【问题描述】:
我们想使用协议缓冲区来定义我们的 API,然后使用 envoy 和 gRPC-JSON 转码器过滤器来提供 HTTP/JSON 端点。
我们正在尝试迁移现有 API,该 API 使用查询字符串参数,例如 ?search[field]=value,其中 field 是您要搜索的字段的名称,value 是该字段的值您正在过滤。
所以我们有一个类似这样的protobuf(我删掉了不重要的东西):
message ListRequest {
string search_field1 = 1 [json_name = "search[field1]"];
string search_field2 = 2 [json_name = "search[field2]"];
string search_field3 = 3 [json_name = "search[field3]"];
}
message ListCallbacksResponse {
}
service Service {
rpc List(ListRequest) returns (ListResponse) {
option (google.api.http) = {
get: "/v1/list"
};
}
}
但是,当我们提出请求(使用[...] 或%5B...%5D)时,它不起作用。例如:
http://localhost/v1/list?search%5Bfield1%5D=field1value
或
http://localhost/v1/list?search[field1]=field1value
但是,如果我们将 protobuf 更新为如下所示:
message ListRequest {
string search_field1 = 1 [json_name = "search%5Bfield1%5D"];
string search_field2 = 2 [json_name = "search%5Bfield2%5D"];
string search_field3 = 3 [json_name = "search%5Bfield3%5D"];
}
然后它似乎工作。但这对我来说似乎不正确。是否有设置或我缺少的东西?
【问题讨论】:
标签: protocol-buffers grpc envoyproxy