Как отправить запрос REST аннотированной конечной точке GRPC? - PullRequest
0 голосов
/ 11 мая 2019

Я не получаю действительный ответ, когда curl с аннотированной конечной точкой REST от протоброфа GRPC

В настоящее время я использую сервер книжного магазина с здесь

Мне удалось успешно подключиться к конечной точке через GRPC с помощью предоставленного клиента.

$ python bookstore_client.py
ListShelves: shelves {
  id: 1
  theme: "Fiction"
}
shelves {
  id: 2
  theme: "Fantasy"
}

Когда я пытаюсь попасть в соответствующую конечную точку REST, он возвращает мне не-текстовый (т.е. не JSON) ответ

$ curl --raw --http2 localhost:8000/v1/shelves 2>/dev/null | xxd
00000000: 0000 1804 0000 0000 0000 0400 4000 0000  ............@...
00000010: 0500 4000 0000 0600 0020 00fe 0300 0000  ..@...... ......
00000020: 0100 0004 0800 0000 0000 003f 0001 0000  ...........?....
00000030: 0806 0000 0000 0000 0000 0000 0000 00    ...............

Я получаю этот ответ независимо от того, что такое URI, то есть /v1/foobar дает тот же результат

Вот соответствующие строки из protobuf

  rpc ListShelves(google.protobuf.Empty) returns (ListShelvesResponse) {
    // Define HTTP mapping.
    // Client example (Assuming your service is hosted at the given 'DOMAIN_NAME'):
    //   curl http://DOMAIN_NAME/v1/shelves
    option (google.api.http) = { get: "/v1/shelves" };
  }

Я ожидал того же ответа, который дал мне клиент Python, но я получаю нетекстовый ответ от сервера GRPC.

1 Ответ

0 голосов
/ 11 мая 2019

В этом примере порт 8000 - это gRPC, а не конечная точка REST.

Чтобы запустить конечную точку, следующую за аннотациями, вам нужно запустить Extensible Service Proxy из docs :

"Конечные точки облака поддерживают транскодирование протокола, поэтому клиенты могут получить доступ к вашему API gRPC с помощью HTTP / JSON. Прокси-сервер расширяемого сервиса (ESP) транскодирует HTTP / JSON в gRPC."

Конечная точка REST будет обслуживаться через другой порт через опцию ESP --http_port.

...