将gRPC错误代码映射到HTTP错误代码

时间:2018-12-23 12:44:03

标签: python google-cloud-platform nginx-reverse-proxy grpc-python

我的Web应用程序向Extensible Service Proxy(ESP)发出HTTP请求,然后,该请求又委托给gRPC server(用Python编写)。忽略Android和iOS客户端,其架构为:

enter image description here

ESP是nginx reverse proxy

gRPC服务器(参考体系结构中的“您的代码”)可能引发异常,在这种情况下,我使用context.abort引发异常并以非OK状态终止RPC:

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

虽然可以使用set_codeset_details,但它们的HTTP状态仍为200 OK。

有两个问题:

  1. gRPC status codes由ESP容器(nginx代理)转换为通用500 Internal Server Error

  2. 附带的详细信息已删除。

  3. 和2.组合表示Web客户端最多具有一个500 Internal Server Error用于gRPC服务器引发的所有异常。

最终,我不明白如何向网络客户端返回更多信息性(理想情况下是自定义)错误。

1 个答案:

答案 0 :(得分:0)

grpc状态代码:: DATA_LOSS转换为HTTP代码500。代码为here

grpc状态详细信息(状态代码和错误消息)以JSON格式发送回响应正文。代码是here