【问题标题】:Http status code for PUT when path parameter ID is different than request body ID路径参数 ID 与请求正文 ID 不同时 PUT 的 Http 状态码
【发布时间】:2021-10-18 10:55:55
【问题描述】:

我正在使用 put 来修改资源。我想知道当路径中给定的 id 与给定资源主体的 id 不同时返回的适当状态代码是什么。

例如

REST api 动作方法为:/resources/{id}

主体:

{
    "id": "test",
    "name": "my_resource"
}

以下 curl 请求应该返回什么 HTTP 状态码?

curl -X PUT 'localhost:8080/resources/test2' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id": "test",
    "name": "my_resource"
}'

【问题讨论】:

    标签: put rest http-status-codes


    【解决方案1】:

    你可以为任何一个提出论据

    • 403 Forbidden(我了解您的要求,但我拒绝满足 - 请参阅响应正文了解详细信息)
    • 409 冲突(您提议的更改与资源的当前状态冲突 - 有关详细信息,请参阅响应正文)
    • 422 无法处理的内容(您的请求正文在内部是一致的,但在这里没有意义 - 有关详细信息,请参阅响应正文)。

    对于 HTTP 应用程序本身的通用元素,您选择哪一个并不重要 - 它们都是不可缓存的错误,组件不会有任何类型的自动恢复,等等.

    您可能会考虑的一个决定因素是这些条目将如何出现在您的访问日志中/您的自动监控将如何处理它们:如果您希望这些消息在您的日志中脱颖而出,那么您会想要选择没有重载其他含义的状态码。

    更多详情见15.5 of HTTP Semantics部分

    您认为带有正确解释的 500 Internal Server Error 是否也可以,还是令人困惑?

    当请求中的信息是问题的根源时,5xx Server Error 是不恰当的,因为请求的形式是客户端的责任,而不是服务器的责任。

    松散地说:4xx 涵盖了服务器宣布“您不应该要求这样做”的所有情况。 5xx 是“你要求的很好,但我做不到”的变体。

    请参阅HTTP Semantics 规范,特别是第 15.5 和 15.6 节(或者,如果您更喜欢早期的参考,RFC 7231 6.56.6

    【讨论】:

    • 您认为 500 内部服务器错误并有适当的解释也可以,还是会令人困惑?
    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 2019-01-28
    • 2023-04-06
    • 2021-08-02
    • 2015-06-02
    • 2020-11-23
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多