带有空数据的 HTTP PUT 的响应代码
Posted
技术标签:
【中文标题】带有空数据的 HTTP PUT 的响应代码【英文标题】:Response code for HTTP PUT with empty data 【发布时间】:2019-04-25 08:34:36 【问题描述】:什么是最常见/行业标准的 HTTP PUT 响应代码:
客户提出了格式正确的请求并且 文件/消息/数据的内容为空和 因为服务器上/数据库中没有任何更改在我的具体情况下,客户端发送带有空 JSON 的 HTTP PUT,如下所示:
虽然我期待更多这样的东西:
key1:
something: value,
something2:value2
,
key2:
something: value3,
something: value4
在我的情况下,这将转换为将 4 个新行插入到数据库中。
我正在考虑 400(因为当您调用 HTTP PUT 但您没有任何东西可以放入时,它可能是一个错误的请求),200, 204 和 304。
我的问题与 this 和 this 不同,因为它们是关于 HTTP GET 方法的,并且与 this 不同,因为虽然它是关于 HTTP PUT 的,但答案并没有解决我的问题。
【问题讨论】:
投票关闭的任何人都愿意解释他们的推理吗? 【参考方案1】:PUT
请求应该替换服务器上指定 uri 的内容。
因此,如果 uri 处的资源已经为空,并且要放置的新资源也是空的,则没有任何更改但仍然成功,因此 200 OK
很好。
如果资源不存在并且您创建了一个新的 0 字节资源,201 Created
可能更合适。
如果资源确实存在但它不为空,并且您发送一个空的PUT
请求,它应该用一个空的资源替换现有资源。
这是你出错的地方,因为 PUT
不应该像你正在做的那样用于每条记录的“upsert”。
如果您声明的 PUT 请求在语义上是正确的,它应该清除与该位置相关的所有现有记录。
您可能想要的是PATCH
或POST
。
【讨论】:
以上是关于带有空数据的 HTTP PUT 的响应代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 RESTkit PUT 请求、更改标头并将响应保存在核心数据中
在带有 Wcf 服务的 Angular JS 的预检响应中,Access-Control-Allow-Methods 不允许方法 PUT
如何正确覆盖 `Illuminate\Routing\Router::toResponse` 以便为空响应发送 HTTP 状态代码 204?