PUT的HTTP状态代码

evu*_*uez 13 rest http

一个PUT请求,可以有很多的成果,我想知道它的状态代码将是最适合他们每个人.

假设我想创建一个新资源,所以我做了类似的事情:

PUT http://example.com/resources/resource-1
Run Code Online (Sandbox Code Playgroud)

我会得到一个HTTP 201因为已经创建了一个新资源.

现在我想更新这个资源,所以我做了同样的请求,新的内容:

PUT http://example.com/resources/resource-1
Run Code Online (Sandbox Code Playgroud)

我得到HTTP 200或者HTTP 204,因为资源已经更新.但是,如果我再次使用相同的内容发送此请求怎么办?服务器应该返回HTTP 200还是HTTP 204什么都没有更新?

我知道,HTTP 200HTTP 204双方只是意味着该请求被成功处理,即使数据不改变请求可以(也应该)仍然可以成功处理.但有没有办法告诉客户端请求已成功处理但服务器端没有任何变化?如果有,是否应该用于PUT请求?PUT如果是幂等的,应该根据服务器端的实际处理返回不同的状态(只要在此处理过程中没有发生错误)?

Cod*_*ter 12

但有没有办法告诉客户端请求已成功处理但服务器端没有任何变化?

是的,但这不是状态代码的用途.

返回200 OK和实体的表示,或204 No Content并且不返回任何内容.

如果没有应用任何更改,请使用类似ETag的标题.客户端可以将ETag与其先前的值进行比较,并确定没有任何更改.

  • @Ray否,因为幂等性大约是服务器上的结果,或更具体地说,是请求URL所标识的资源的字节内容,而不是响应消息的内容。服务器上的结果在相同资源的连续PUT上不会更改。:)例如:[_“注意,幂等操作在服务器上产生相同的结果(无副作用),响应本身可能不相同(例如,资源的状态可能在请求之间改变)” _](http ://www.restapitutorial.com/lessons/idempotency.html)。 (2认同)