Rest PUT的HTTP状态代码

Rest PUT的HTTP状态代码,rest,http,Rest,Http,一个PUT请求可能会有很多结果,我想知道哪种状态代码最适合每个请求 假设我想创建一个新的资源,我会这样做: PUT http://example.com/resources/resource-1 我会得到一个http201,因为已经创建了一个新的资源 现在我想更新此资源,因此我使用新内容执行相同的请求: PUT http://example.com/resources/resource-1 我得到了http200或http204,因为资源已经更新了。但是如果我用同样的内容再次发送这个请求呢?

一个
PUT
请求可能会有很多结果,我想知道哪种状态代码最适合每个请求

假设我想创建一个新的资源,我会这样做:

PUT http://example.com/resources/resource-1
我会得到一个
http201
,因为已经创建了一个新的资源

现在我想更新此资源,因此我使用新内容执行相同的请求:

PUT http://example.com/resources/resource-1
我得到了
http200
http204
,因为资源已经更新了。但是如果我用同样的内容再次发送这个请求呢?即使未更新任何内容,服务器是否应返回
HTTP 200
HTTP 204

我知道
http200
http204
都意味着请求被成功处理,即使数据没有改变,请求仍然可以(而且应该)被成功处理。但是有没有一种方法可以告诉客户机请求已成功处理,但服务器端没有任何更改?如果有,它是否应该用于
PUT
请求
PUT
是幂等的,是否应根据服务器端的实际处理返回不同的状态(只要在此处理过程中没有发生错误)

但是有没有一种方法可以告诉客户机请求已成功处理,但服务器端没有任何更改

是的,但那不是状态码的用途

返回200 OK和实体的表示,或204 No Content和NOUTH


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

如果资源在第一个PUT请求中返回201,但在后续请求中返回200或204,这是否不违反幂等性(PUT所需)@Ray no,因为幂等性与服务器上的结果有关,或者更具体地说,是由请求URL标识的资源的字节内容,而不是响应消息的内容。服务器上的结果在相同资源的连续PUT上不会更改。:)请参见示例:。啊。。。谢谢你的澄清,这是完全有意义的。补充:这篇文章中的答案非常有用。