HTTP标头状态是否与RESTful呼叫的主体状态匹配

时间:2018-03-12 18:55:33

标签: rest web-services http

构建RESTful Web服务端点,并想知道HTTP标头状态与响应正文中的状态的最佳实践是什么。他们应该总是匹配,还是可以不同?例如,在发生错误请求的情况下,它实际上是我们的应用层,它负责解析和处理有效负载。因此,如果请求进入应用程序层,HTTP标头是否显示200(表示传输没有问题),而响应主体包含400(表示错误的请求)?或者他们应该总是匹配?标题和身体都有400?

感谢。

1 个答案:

答案 0 :(得分:0)

一般来说,保持一致是一种好习惯。因此,如果您打算在JSON正文中返回HTTP状态代码,它应该与HTTP状态代码相同。

如果您想添加有关应用程序错误的更多详细信息。 JSON-API standard为JSON错误主体定义了一些字段,例如:

  • 代码:特定于应用程序的错误代码,表示为字符串值。例如,您可以使用不同的HTTP 400状态代码。
  • 标题:一个简短的,人类可读的问题摘要,除了本地化目的外,不应该从问题的发生变为问题。
  • 详细信息:特定于此问题发生的人类可读解释。与标题一样,此字段的值可以进行本地化。

想象一下,您的应用程序有以下路线来获取属于艺术家的歌曲(由:id参数标识)的详细信息(由:artist_id参数标识):

GET /artists/:artist_id/songs/:id

此请求可能会产生两个不同的Not Found错误:

  1. 未找到艺术家时
  2. 未找到歌曲时
  3. 对于这两种情况,您将返回HTTP 404状态代码。但是,在您的json正文中,您可以添加更多详细信息:

    1. 找不到艺术家的时候
      • 代码:10
      • 标题:未找到艺术家
      • 详细信息:ID为#{artist_id}的艺术家不存在
    2. 找不到歌曲时
      • 代码:12
      • 标题:未找到歌曲
      • 详细信息:#{artist.name}
      • 不存在ID为{{id}的歌曲
    3. 我还建议您查看JSON-API standard如何定义HTTP错误代码