我的Web应用程序向Extensible Service Proxy(ESP)发出HTTP请求,然后,该请求又委托给gRPC server(用Python编写)。忽略Android和iOS客户端,其架构为:
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_code和set_details,但它们的HTTP状态仍为200 OK。
有两个问题:
gRPC status codes由ESP容器(nginx代理)转换为通用500 Internal Server Error
。
附带的详细信息已删除。
和2.组合表示Web客户端最多具有一个500 Internal Server Error
用于gRPC服务器引发的所有异常。
最终,我不明白如何向网络客户端返回更多信息性(理想情况下是自定义)错误。