GRPC 重复字段不会转码为数组作为 REST API 中的主体参数

问题描述

我在尝试使用 REST 向我的 GRPC 服务器发送包含对象数组的 JSON 的 PUT 请求时运气不佳。使用 GRPC 但是它像预期的那样接受一个数组。这是我在 proto 文件中定义的内容

message UpdateRequest {
    repeated Data data = 1;
    int32 Id = 2;
}

message UpdateResponse {
}

message Data {
    int32 id = 1;
    string name = 2;

}

rpc Update(UpdateRequest) returns (UpdateResponse) {
    option (google.api.http) = {
       put: "/v1/data/{Id}"
       body: "*"
     };
}

这已成功部署到 GCP 端点,但根据 GCP enpointsportal,请求正文应该只包含一个对象,例如:

{
    "data": {
       
    }
}

而不是像预期的对象数组:

    {
    "data": [
       {},{}
    ]
}

我试过用“数据”替换正文中的“*”

    rpc Update(UpdateRequest) returns (UpdateResponse) {
    option (google.api.http) = {
       put: "/v1/data/{Id}"
       body: "data"
     };
}

这也可以编译,但在尝试部署到 GCP 端点时失败,并显示以下消息:

种类:错误 message: "http: body 字段路径 'data' 必须是非重复的消息。"

任何关于我应该如何解决这个问题的建议将不胜感激。

更新: 这是我的 .yaml 文件内容

type: google.api.Service
config_version: 3

name: xxx.xxx-xxx.dev

title: xxxx
apis:
  - name: x.x
  - name: x.y


backend:
  rules:
    - selector: "*"
      address: grpcs://xxx-xxx-app-xxxx-lz.a.run.app

解决方法

根据 GCP 支持,这是一个已知问题。 这是谷歌问题跟踪器链接:https://issuetracker.google.com/issues/178486575

,

这似乎是 GCP 端点门户中的一个错误。我现在通过 CURL 和我的前端应用程序成功地发送了包含对象的数组的更新请求,尽管这不能通过端点工作。