【问题标题】:Should HTTP Header Status match Body Status for RESTful callsHTTP 标头状态是否应与 RESTful 调用的主体状态匹配
【发布时间】:2018-08-20 21:46:06
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: rest web-services http


    【解决方案1】:

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

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

    • code:特定于应用程序的错误代码,以字符串值表示。例如,您可以为 HTTP 400 状态代码设置不同的代码。
    • 标题:对问题的简短、易读的摘要,不应随着问题的发生而变化,除非用于本地化目的。
    • 详细信息:针对此问题发生的特定于人类可读的解释。与标题一样,该字段的值也可以本地化。

    假设您的应用程序具有以下路径来获取属于艺术家(由 :artist_id 参数标识)的歌曲(由 :id 参数标识)的详细信息:

    GET /artists/:artist_id/songs/:id
    

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

    1. 找不到艺术家时
    2. 找不到歌曲时

    对于这两种情况,您都将返回 HTTP 404 状态代码。但是,在您的 json 正文中,您可以添加更多详细信息:

    1. 当找不到艺术家时
      • 代码:10
      • 标题:未找到艺术家
      • 详细信息:ID 为 #{artist_id} 的艺术家不存在
    2. 找不到歌曲时
      • 代码:12
      • 标题:未找到歌曲
      • 详细信息:ID 为#{id} 的歌曲不存在#{artist.name}

    我还建议你看看JSON-API standard 是如何定义 HTTP 错误代码的

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多