Разрешить повторное поле в gRP C Транскодирование - PullRequest
2 голосов
/ 08 марта 2020

Я использую 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: Невозможно преобразовать в конфигурацию службы.

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

Обновление

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

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

1 Ответ

1 голос
/ 09 марта 2020

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

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

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

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

Дайте мне знать, помогла ли вам эта информация!

...