gpt4 book ai didi

rest - 当 PUT 是空操作时,HTTP 服务器应该返回 200 吗?

转载 作者:可可西里 更新时间:2023-11-01 17:09:07 24 4
gpt4 key购买 nike

我重新阅读了 HTTP 规范。

它声明如果资源已经创建,PUT 应该被视为请求修改现有资源。

它声明 PUT 在成功时应该返回 200 或 204,但没有创建资源。

它声明 PUT 应该是幂等的,并且在使用相同的相同请求多次调用时没有不需要的副作用

它似乎没有说明的是-当它是一个没有副作用的幂等场景时,PUT 应该返回成功,并且只有成功,(而不是例如 409 冲突以响应服务器检测到的服务器想要禁止无操作的无操作 PUT 请求)。

我的问题是,最好的做法是什么?要么:

  1. 我错过了什么吗?在 HTTP 规范或其他众所周知的 REST 准则中,我没有看到什么?

  1. 假设您对我遗漏的一切一无所知,那么您对 ​​200 是否应该是 HTTP 的推荐行为有何看法?为什么?您能想出任何不因空操作而返回 200/204 的充分理由吗?

最佳答案

是的,你应该返回 200 或 204。

首先,PUT不被视为修改现有资源的请求。您可能正在阅读 RFC 2616 ,已被 RFC 7231 废弃对此。 PUT 始终是在给定 URI 处替换资源的请求,但这在 RFC 2616 上不是很清楚。如果它已经存在,则 paylod 应该是同一资源的修改版本,但操作仍然是完全替换,而不是修改。

从这个意义上讲,不存在no-op PUT 这样的东西,您总是在替换由该URI 标识的内容,即使是完全相同的东西。从客户的角度来看是否发生了变化是无关紧要的。对于服务器来说,重要的是整个东西都被替换了。

作为一般规则,GET、PUT、PATCH 和 DELETE 方法的语义应该可以很容易地概括为所有内容,如果您要向它们的语义添加一些已经通过其他方法可用的东西,您可能做错了什么.要在无操作请求上返回错误,因为如果这是客户端想要的,则可以使用前提条件 header 实现资源不会发生任何更改,因此将这部分作为 PUT 语义是没有意义的。

关于rest - 当 PUT 是空操作时,HTTP 服务器应该返回 200 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com