gpt4 book ai didi

http - Put 与 Post - REST

转载 作者:可可西里 更新时间:2023-11-01 16:23:48 26 4
gpt4 key购买 nike

在查看“petclinic”中的代码时,我注意到了 Spring 3.0 示例的一部分

<c:choose>
<c:when test="${owner.new}"><c:set var="method" value="post"/></c:when>
<c:otherwise><c:set var="method" value="put"/></c:otherwise>
</c:choose>

SO 的讨论中似乎 PUT 应该用于“创建/更新”,POST 用于“更新”。

哪个是对的?

将 post 用于“创建”和将 put 用于“更新”有什么影响?

注意:根据 HTTP/1.1 规范。在引用的 SO 讨论中引用,上面给出的代码似乎具有正确的行为。

最佳答案

根据 HTTP 规范,POST 和 PUT 都具有明确定义的行为。

POST 请求的结果应该是从属于请求 URL 的新资源;响应应包含带有新创建资源 URL 的 Location header 。

PUT 的结果应该是更新请求 URL 上的资源。如果请求 URL 中没有现有资源,则可以创建一个新资源。

混淆的起因是 POST 也与表单一起用作传递表单数据的机制。最常见的表单实现是回发到表单页面所在的同一 URL,从而给人一种错误的想法,即 POST 操作用于更新。但是,在这种特殊用法中,表单页面不是资源。

考虑到所有这些,这是正确的(当然在我看来 :-))用法:

在以下情况下应使用 POST 创建新资源:
- 新资源从属于现有资源 - 资源标识/URL 在创建时未知

PUT 应该用于更新具有众所周知的 URL 的现有资源。它也可以用于在众所周知的 URL 上创建资源;但是,以不同的方式考虑这种情况确实有帮助 - 如果资源 URL 在发出 PUT 请求之前已知,则可以将其视为与该位置已存在但为空的资源相同。

关于http - Put 与 Post - REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com