Мое веб-приложение отправляет HTTP-запросы к Расширяемому прокси-серверу (ESP), который, в свою очередь, делегирует сервер gRPC (написанный на Python).Игнорируется клиенты Android и iOS. Архитектура:
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.
Есть две проблемы:
Коды состояния gRPC преобразуются контейнером ESP (прокси nginx) в универсальный 500 Internal Server Error
.
Сопутствующие данные вычеркнуты.
и 2. комбинированные означает, что веб-клиент имеет, как правило, 500 Internal Server Error
для все исключения, сгенерированные сервером gRPC.
В конечном счете, я не понимаю, как более информативные (в идеале, пользовательские) ошибки могут быть возвращены веб-клиентам.