在 MVC 2 发布后,我开始查看和使用其中的新功能,但是我不明白 PUT
和 DELETE
动词的用途。
我搜索了一些文章,但是仍然不理解。
DELETE
和 PUT
的主要目的是什么?它们与使用 GET
或 POST
方法相比有何优势(即使我可以使用 GET 和 POST 处理所有请求)?
在 MVC 2 发布后,我开始查看和使用其中的新功能,但是我不明白 PUT
和 DELETE
动词的用途。
我搜索了一些文章,但是仍然不理解。
DELETE
和 PUT
的主要目的是什么?它们与使用 GET
或 POST
方法相比有何优势(即使我可以使用 GET 和 POST 处理所有请求)?
GET:仅用于将信息发送回客户端。它应该是一个可重复的操作,没有副作用。
POST:它执行具有副作用的操作。它是不可重复的(如果您两次POST,则服务器会执行两次)。操作后,应使用GET将其重定向到另一页以显示结果。
DELETE:其唯一功能是执行破坏性操作,不可重复(一旦对象被删除,就没有其他要删除的内容)。
PUT:其功能是修改单个对象并使用类似POST的方式更新它的值。可重复。
您可以使用POST来模拟DELETE和PUT(因为某些Web浏览器无法识别DELETE和PUT)。
请仅使用GET来显示信息,而不是执行具有副作用的操作。
DELETE
应该用于删除数据的请求,PUT
应该用于插入数据的请求。基本上,它用于更好地区分操作/特权。
PUT和DELETE方法被定义为幂等的,这意味着多个相同的请求应该与单个请求具有相同的效果。 GET、HEAD、OPTIONS和TRACE方法被规定为安全的,也应该是幂等的,因为HTTP是一种无状态协议。相比之下,POST方法不一定是幂等的,因此多次发送相同的POST请求可能会进一步影响状态或导致进一步的副作用(例如财务交易)。在某些情况下,这可能是可取的,但在其他情况下,这可能是由于意外发生的,例如当用户没有意识到他们的操作将导致发送另一个请求,或者他们没有收到足够的反馈表明他们的第一个请求成功。虽然 Web 浏览器在某些情况下可能会显示警报对话框,以警告用户重新加载页面可能会重新提交 POST 请求的情况,但通常由 Web 应用程序处理不应提交多次 POST 请求的情况。请注意,方法是否幂等并不受协议或 Web 服务器的强制执行。 完全可以编写一个 Web 应用程序,在其中(例如)通过 GET 或其他请求触发数据库插入或其他非幂等操作。 然而,忽略这个建议可能会导致不良后果,如果用户代理认为重复相同请求是安全的,而实际上它并不是安全的。
via 维基百科
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
首先,你应该查看BlaM非常好的答案来回答这个(重复?)问题。
显然,你可以在不使用REST原则的情况下技术上创建/更新/删除资源,但你会错过一点。如果你仍然不真正理解REST背后的概念,Ryan Tomayko的博客文章是一个不错的起点。
最初的目的是使用这些动词(更多关于RESTful系统)来编辑网页。它们已经被WebDAV扩展弃用。实际上,PUT和DELETE从未被使用过(或者只有自定义应用程序非常少使用)。