Отображение кодов ошибок gRPC на коды ошибок HTTP - PullRequest
0 голосов
/ 23 декабря 2018

Мое веб-приложение отправляет HTTP-запросы к Расширяемому прокси-серверу (ESP), который, в свою очередь, делегирует сервер gRPC (написанный на Python).Игнорируется клиенты Android и iOS. Архитектура:

enter image description here

ESP - это nginx обратный прокси .

Сервер gRPC («Ваш код» в эталонной архитектуре) может вызвать исключение, и в этом случае я использую context.abort , чтобы вызвать исключение и завершить RPC со статусом не OK:

try:
  # Do something that could fail.
except ValueError as e:
  context.abort(grpc.StatusCode.DATA_LOSS, str(e))

Хотя можно использовать set_code и set_details , они все равно приводят к состоянию HTTP 200 OK.

Есть две проблемы:

  1. Коды состояния gRPC преобразуются контейнером ESP (прокси nginx) в универсальный 500 Internal Server Error.

  2. Сопутствующие данные вычеркнуты.

  3. и 2. комбинированные означает, что веб-клиент имеет, как правило, 500 Internal Server Error для все исключения, сгенерированные сервером gRPC.

В конечном счете, я не понимаю, как более информативные (в идеале, пользовательские) ошибки могут быть возвращены веб-клиентам.

1 Ответ

0 голосов
/ 08 января 2019

grpc Код состояния :: DATA_LOSS, переведены в HTTP-код 500. Код здесь

Подробная информация о состоянии grpc (код состояния и сообщение об ошибке) отправляется обратно в ответтело в формате JSON.Код здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...