构建一个 RESTful Web 服务端点,并想知道 HTTP 标头状态与响应正文中的状态的最佳实践是什么。它们应该始终匹配,还是可以不同?例如,如果发生错误的请求,实际上是我们的应用层对有效负载进行解析和处理。因此,如果请求到达应用程序层,HTTP 标头是否应该显示 200(表示传输没有问题),而响应正文包含 400(表示错误请求)?还是它们应该始终匹配?标题和正文中都有 400?
谢谢。
一般来说,保持一致是一种很好的做法。因此,如果您打算在 JSON 正文中返回 HTTP 状态代码,它应该与 HTTP 状态代码相同。
如果要添加有关应用程序错误的更多详细信息。JSON-API 标准为 JSON 错误正文定义了一些字段,例如:
代码- :特定于应用程序的错误代码,表示为字符串值。例如,HTTP 400 状态代码可能有不同的代码。
- title:一个简短的、人类可读的问题摘要,除非出于本地化目的,否则不应随问题的发生而改变。
- 详细信息:特定于此问题的发生,人类可读的解释。与标题一样,此字段的值可以本地化。
假设您的应用程序具有以下路由来获取属于艺术家(由 :artist_id 参数标识)的歌曲(由 :id 参数标识)的详细信息:
GET /artists/:artist_id/songs/:id
此请求可能会产生两个不同的"未找到"错误:
- 找不到艺术家时
- 找不到歌曲时
对于这两种情况,您将返回 HTTP 404 状态代码。但是,在 json 正文中,您可以添加更多详细信息:
- 找不到艺术家时
- 型号:10
- 标题: 艺术家未找到
- 详细信息:ID 为 #{artist_id} 的艺术家不存在
- 找不到歌曲时
- 型号:12
- 标题: 歌曲未找到
- 详细信息:ID 为 #{id} 的歌曲对于 #{artist.name} 不存在
我还建议您查看JSON-API标准如何定义HTTP错误代码