【发布时间】:2017-11-20 11:32:55
【问题描述】:
我们有一个微服务架构,我们正在讨论如何将内部错误暴露给客户端。
这是一个例子:
假设我们有 3 个服务,服务 A、B 和 C。 当客户端向公共的服务 A 发送请求时,该服务向服务 B 发送请求,该请求向服务 C 发送请求(这是内部的并且需要身份验证,但是凭据像环境变量一样存储在内部,它们是不是由客户端发送的)。
并且由于某种原因,B 和 C 之间的通信收到 401(可能是 422、403 或任何与客户端相关的错误),这意味着该请求未被授权。
B 和 C 之间的通信是内部的,用户不知道这些服务。我应该公开我们向客户发送 401 的内部结构吗?既然不是客户的错?我应该发送 500 吗?
【问题讨论】:
-
如果不是用户的错,那么 5xx 是正确的响应码范围。
-
@OliverCharlesworth 我同意你的观点,我应该在内部记录这个错误并且不向用户公开任何信息吗?你怎么看?
-
视情况而定。但通常认为向用户公开内部错误详细信息(如堆栈跟踪)是不好的(从 UX 和安全角度来看)。最多只有一些消息,例如“500 服务器错误 - 您的唯一错误 ID 是 123456”,它允许您稍后将用户与错误日志中的 ID 相关联。
标签: rest api http microservices restful-architecture