【问题标题】:Envoy gRPC-JSON Transcoder with special characters in query param namesEnvoy gRPC-JSON 转码器在查询参数名称中具有特殊字符
【发布时间】: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"];
}

然后它似乎工作。但这对我来说似乎不正确。是否有设置或我缺少的东西?

我也有opened an issue on envoy's github

【问题讨论】:

    标签: protocol-buffers grpc envoyproxy


    【解决方案1】:

    似乎这是grpc-httpjson-transcoding 中的一个问题,该问题已得到修复,现在是 v1.23.0 的一部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2013-06-06
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多