问题描述
我在尝试使用 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' 必须是非重复的消息。"
任何关于我应该如何解决这个问题的建议将不胜感激。
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 和我的前端应用程序成功地发送了包含对象的数组的更新请求,尽管这不能通过端点工作。