Разрешить повторяющееся поле в перекодировке gRPC

Я использую gRPC в конечных точках Google CLoud. Я использую быстрый пример для Python для конечной точки
Я добавляю одну функцию для SayHelloRepeated, но не знаю, как перекодировать повторяющееся поле.

helloworld.proto

service Greeter {
...

rpc SayHelloRepeated (RepeatedHello) returns (HelloReply) {}

...
}

message RepeatedHello {
repeated HelloRequest hello_request = 1;
}

message HelloRequest {
string name = 1;
}

api_config_http.yaml

http:
rules:
    ...

    - selector: helloworld.Greeter.SayHelloRepeated
    get: /v1/rsayhello/{hello_request}

    ...

Когда я пытаюсь развернуть api_config_http.yaml, появляется ошибка Повторное поле не разрешено

ОШИБКА: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT: невозможно преобразовать в конфигурацию службы.

kind: ERROR message: "http: повторное поле не разрешено: достигнуто через \ 'hello_request \' в сообщении \ 'helloworld.RepeatedHello \'."

Обновить

Что делать, если HelloRequest имеет несколько полей, а не только одно поле name, что делать.

message HelloRequest {
string name = 1;
string message = 2;
}

person Azeem Haider    schedule 08.03.2020    source источник


Ответы (1)


Согласно официальной документации Пакет google.api < / а>:

Каждое сопоставление определяет шаблон пути URL и метод HTTP. Шаблон пути может относиться к одному или нескольким полям в сообщении запроса gRPC, если каждое поле является неповторяющимся полем с примитивным типом (не сообщение).

Это означает, что вы не можете использовать повторяющееся поле в gRPC. Таким образом, вы не можете использовать этот точный формат для использования повторяющихся полей.

Я бы порекомендовал вам проверить эту часть документации - gRPC Transcoding - чтобы получить дополнительную информацию о том, как выполнить обходной путь для достижения использования повторяющихся полей.

Сообщите мне, помогла ли вам информация!

person gso_gabriel    schedule 09.03.2020
comment
Привет, @AzeemHaider, не могли бы вы взглянуть на этот случай здесь? Я считаю, что он должен оказать вам некоторую помощь, поскольку проблема пользователя, похоже, похожа на вашу, касающуюся передачи нескольких значений через GET. - person gso_gabriel; 12.03.2020
comment
Я проверил, но он использует openapi.yaml. Я использую gRPC. Все еще не могу понять, как передать повторяющееся поле. Не могли бы вы показать мне какой-нибудь пример. - person Azeem Haider; 14.03.2020
comment
Привет, @AzeemHaider, как я уже упоминал в своем ответе, к сожалению, в gRPC нет возможности использовать повторяющееся поле. Однако в этой документации здесь, вы должны найти информацию о том, как это исправить. Не могли бы вы это проверить? - person gso_gabriel; 23.03.2020