【发布时间】:2020-11-17 13:44:36
【问题描述】:
我正在尝试确定在各种错误条件下将哪个 HTTP 状态代码返回给其余客户端。我觉得这个任务压力很大,因为阅读 HTTP 状态码定义就像阅读宪法一样,每个人对同一件事的理解可能不同。
例如,有些人说如果找不到请求的资源,则返回 404 Not Found,而有些人说不应该,因为这意味着端点不可用。
另一个例子是这篇文章: What HTTP response code to use for failed POST request?,答案建议返回 422 Unprocessable Entity 而不是通用错误 400 Bad Request。
我的问题是,为什么不从简单开始,对所有错误返回 400 Bad Request,在响应正文中提供上下文,并且仅在有明显价值时才包含更多 HTTP 状态代码?
例如,之前我们在应用访问令牌过期时返回 200 OK。为了帮助应用解决此问题,我们在响应中提供了一个内部错误 ID,以便客户端可以使用其刷新令牌请求新的访问令牌。但是我们意识到,通过返回 401 Unauthorized,客户端的实现可以简单得多,因为它使用了库。现在我们认为通过添加一个新的 HTTP 状态码,这里有一个明显的价值。
所以再次总结我的问题,是否需要强调返回哪个特定的 HTTP 状态代码?如果响应正文中提供了上下文,在我的第二个示例中返回 400 有什么问题?
【问题讨论】:
-
虽然 4xx 范围内的响应代码通常被认为是由客户端引起的故障,但我喜欢 Jim Webber 的看法,他将状态代码视为coordination data,在流程的每个步骤中,我们都知道是否有某事进展顺利或糟糕,如果出现问题,它会为我们提供有关如何解决问题的反馈。
标签: node.js rest http api-design http-response-codes