rest - PUT 的 HTTP 状态代码

标签 rest http

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

假设我想创建一个新资源,那么我会做类似的事情:

PUT http://example.com/resources/resource-1

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

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

PUT http://example.com/resources/resource-1

我得到 HTTP 200HTTP 204,因为资源已更新。但是,如果我以相同的内容再次发送此请求怎么办?服务器是否应该返回 HTTP 200HTTP 204,即使没有任何更新?

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

最佳答案

But is there a way to tell the client that the request has been successfully processed but nothing has changed on the server side?

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

要么返回 200 OK 和实体的表示,要么返回 204 No Content 并且什么都不返回。

如果不应用任何更改,请使用像 ETag 这样的 header 。客户端可以将 ETag 与其之前的值进行比较,并确定没有任何变化。

关于rest - PUT 的 HTTP 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087272/

相关文章:

javascript - 在 Nodejs 中按顺序循环和处理两个 REST API 调用

java - 错误后的动态结果(列表或对象)

javascript - Http 内容导致 Https 内容出错

azure - Xamarin.Android 无法在 Android 10 Q 中从 Azure 数据库中提取表

.htaccess - 将根 HTTP 重定向到根 HTTPS

rest - LetsEncrypt - ACMESharp 客户端挑战处于待处理状态超过一个小时

REST 将创建资源的表示或创建并传输资源的表示?

rest - 使用 WSO2 API 管理器发布 SOAP 服务

http - 在 Golang 中访问上传的文件

ios - 测试飞行构建显示无法连接到服务器