将下游错误代码转换为 gRPC 错误代码的正确约定是什么?
What is the right convention for conversion of downstream error code to gRPC error code?
假设我在 ServiceA
工作,调用 ServiceB
。现在如果 ServiceB
returns NotFound、AlreadyExists 或 InvalidArgument 错误代码,我们应该 return 给 ServiceA
的调用者什么?
基于 documentation 到 gRPC 错误代码,看起来 Internal
是我们应该 return if
invariants expected by the underlying system have been broken
我不太确定这个粗体文本是什么意思,是否意味着任何下游错误都应该 return 编辑为 Internal
错误代码?
例如,NotFound
文档说:
NotFound means some requested entity (e.g., file or directory) was not
found
这是否意味着我们应该将下游错误和 return NotFound
解析给 ServiceA
的调用者 if ServiceB
returns NotFound
?
您 return 中端点的状态代码 ServiceA
应该对调用者有意义。您的业务逻辑应该规定应该为下游错误 return 编辑什么状态代码。 return 传递下游服务的代码可能有意义,但并非总是如此。
考虑您实施 getUserDetails
端点的情况,该端点从 UserService
调用 getUser
并从 RatingService
.
调用 getRatings
- If
getUser
returns NotFound, return NotFound 是有意义的来电者也是因为用户不存在。
- 如果
getRatings
returns NotFound,你可以 return 一个 Internal 错误作为您没有足够的信息来 return 完整的回复。在这种情况下,如果您 return NotFound 客户端可能会认为未找到用户,但事实并非如此。
假设我在 ServiceA
工作,调用 ServiceB
。现在如果 ServiceB
returns NotFound、AlreadyExists 或 InvalidArgument 错误代码,我们应该 return 给 ServiceA
的调用者什么?
基于 documentation 到 gRPC 错误代码,看起来
Internal
是我们应该 return ifinvariants expected by the underlying system have been broken
我不太确定这个粗体文本是什么意思,是否意味着任何下游错误都应该 return 编辑为
Internal
错误代码?例如,
NotFound
文档说:NotFound means some requested entity (e.g., file or directory) was not found
这是否意味着我们应该将下游错误和 return
NotFound
解析给ServiceA
的调用者 ifServiceB
returnsNotFound
?
您 return 中端点的状态代码 ServiceA
应该对调用者有意义。您的业务逻辑应该规定应该为下游错误 return 编辑什么状态代码。 return 传递下游服务的代码可能有意义,但并非总是如此。
考虑您实施 getUserDetails
端点的情况,该端点从 UserService
调用 getUser
并从 RatingService
.
getRatings
- If
getUser
returns NotFound, return NotFound 是有意义的来电者也是因为用户不存在。 - 如果
getRatings
returns NotFound,你可以 return 一个 Internal 错误作为您没有足够的信息来 return 完整的回复。在这种情况下,如果您 return NotFound 客户端可能会认为未找到用户,但事实并非如此。