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

时间:2014-10-28 22:06:07

标签: rest http

我重读了HTTP规范。

它声明如果已经创建了资源,则应将PUT视为修改现有资源的请求。

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

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

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

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

  1. 我错过了什么吗?在HTTP规范或其他众所周知的REST指南中,我没有看到什么?
    1. 假设您不知道我错过了什么,您对200是否应该是HTTP的推荐行为有什么看法?为什么?你能想出任何没有理由不返回200/204的无操作吗?

1 个答案:

答案 0 :(得分:2)

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

首先,PUT不被视为修改现有资源的请求。您可能正在阅读RFC 2616RFC 7231就此已经过时了。 PUT总是请求替换给定URI的资源,但这在RFC 2616上并不是很清楚。如果它已经存在,那么paylod应该是相同的修改版本资源,但操作仍然是完全替代,而不是修改。

从这个意义上讲,没有no-op PUT这样的东西,你总是会替换那个URI所标识的东西,即使是完全相同的东西。从客户的角度来看是否发生了变化是无关紧要的。对于服务器来说,重要的是整个事情都被替换了。

作为一般规则,GET,PUT,PATCH和DELETE方法的语义应该很容易针对所有内容进行推广,如果您要通过其他内容添加已经可用的语义,那么您就可以了。可能做错了什么。要在无操作请求上返回错误,因为如果客户端需要的话,可以使用前置条件标题来实现资源不会发生更改,因此将其作为部分内容是没有意义的。 PUT语义。