【问题标题】:What is the right convention for conversion of downstream error code to gRPC error code?将下游错误代码转换为 gRPC 错误代码的正确约定是什么?
【发布时间】:2020-03-30 14:42:55
【问题描述】:

假设我在ServiceA 工作,它调用ServiceB。现在如果ServiceB返回NotFound、AlreadyExists或InvalidArgument错误码,我们应该向ServiceA的调用者返回什么?

  1. 根据 documentation 到 gRPC 的错误代码,看起来 Internal 是我们应该返回的如果

    底层系统预期的不变量已被破坏

    我不太确定这个粗体文本是什么意思,是否意味着任何下游错误都应该返回为Internal 错误代码?

  2. 例如,NotFound 文档说:

    NotFound 表示某些请求的实体(例如,文件或目录)不存在 找到了

    这是否意味着如果ServiceB返回NotFound,我们应该解析下游错误并返回NotFoundServiceA的调用者?

【问题讨论】:

    标签: grpc grpc-go


    【解决方案1】:

    您在ServiceA 中为端点返回的状态代码应该对调用者有意义。您的业​​务逻辑应该规定应该为下游错误返回什么状态代码。通过下游服务的代码返回可能是有意义的,但并非总是如此。

    考虑您实现getUserDetails 端点的情况,该端点从UserService 调用getUser,从RatingService 调用getRatings

    1. 如果getUser 返回NotFound,那么将NotFound也返回给调用者是有意义的,因为用户不存在。
    2. 如果getRatings 返回NotFound,您可以返回内部 错误,因为您没有足够的信息来返回完整的响应。在这种情况下,如果您返回 NotFound,客户​​端可能会假定未找到用户,但事实并非如此。

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多