我已经阅读了很多相关内容,但无法就此主题得出结论。
但我从未使用过PUT或DELETE HTTP Request方法。我倾向于在系统(我的应用程序或网站)的统计数据可能不受影响(如产品列表)时使用GET,并在受影响时使用POST(下订单)。这还不够,还是我错过了什么?
答案 0 :(得分:79)
DELETE用于删除请求资源:
DELETE方法请求源服务器删除Request-URI标识的资源。可以通过源服务器上的人为干预(或其他方式)覆盖此方法。即使从源服务器返回的状态代码表明操作已成功完成,也无法保证客户端已执行该操作...
PUT用于在服务器上放置或更新资源:
PUT方法请求将所包含的实体存储在提供的Request-URI下。如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本。如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源...
有关完整规范,请访问:
Since current browsers unfortunately do not support any other verbs than POST and GET in HTML forms,你通常无法使用HTTP来充分利用它们(你仍然可以通过JavaScript劫持他们的提交)。 HTML表单中缺少对这些方法的支持导致URI包含动词,例如
POST http://example.com/order/1/delete
甚至更糟
POST http://example.com/deleteOrder/id/1
通过HTTP有效地隧道化CRUD语义。但动词从未打算成为URI的一部分。相反,HTTP已经通过HTTP方法向CRUD资源(例如订单)提供机制和语义。 HTTP是一种协议,而不仅仅是一些数据隧道服务。
因此,要删除网络服务器上的资源,您需要调用
DELETE http://example.com/order/1
并更新它,你打电话
PUT http://example.com/order/1
并在PUT正文中提供更新的资源表示,供网络服务器应用。
因此,如果要为REST API构建某种客户端,则可能会发送PUT和DELETE请求。这可以是在浏览器内构建的客户端,例如通过JavaScript发送请求,或者它可能是在服务器上运行的某个工具等。
有关详细信息,请访问:
答案 1 :(得分:23)
使用HTTP请求动词(如GET,POST,DELETE,PUT等)使您可以构建RESTful Web应用程序。在此处阅读:http://en.wikipedia.org/wiki/Representational_state_transfer
从中看到好处的最简单方法是查看此示例。
每个MVC框架都有一个Router/Dispatcher
,它将URL-s映射到actionControllers。
所以这样的网址:/blog/article/1
会调用blogController::articleAction($id);
现在,此路由器仅识别URL或/blog/article/1/
但是,如果该路由器知道整个HTTP请求对象而不仅仅是URL,他可以访问HTTP请求动词(GET,POST,PUT,DELETE ...),以及许多其他有关当前HTTP请求的有用信息。
这将使您能够配置应用程序,以便它可以接受相同的URL并将其映射到不同的actionControllers,具体取决于HTTP Request动词。
例如:
如果你想要翻阅第1条,你可以这样做:
GET /blog/article/1 HTTP/1.1
但是如果你想删除第1条,你会这样做:
DELETE /blog/article/1 HTTP/1.1
请注意,两个HTTP请求都具有相同的URI,/ blog / article / 1,唯一的区别是HTTP请求动词。并且基于该动词,您的路由器可以调用不同的actionController。这使您可以构建整洁的URL。
阅读这两篇文章,他们可能会帮到你:
这些文章是关于Symfony 2框架的,但它们可以帮助您弄清楚HTTP请求和响应如何工作。
希望这有帮助!
答案 2 :(得分:4)
尽管我冒着不受欢迎的风险,但我说它们在当今没有用。
在过去,例如DELETE告诉服务器删除在提供的URL上找到的资源,而PUT(及其同级PATCH)告诉服务器以幂等方式进行更新时,我认为它们是很好的用途。
事情发展了,URL变成了虚拟的(例如,参见 URL重写),使资源失去了真实文件夹/ subforder / file的初始含义,因此,HTTP协议方法(GET, POST,PUT / PATCH,DELETE)丢失了曲目。
让我们举个例子:
在左边没有写HTTP方法,本质上没关系(POST和GET就足够了),在右边使用了适当的HTTP方法。
右侧看起来优雅,干净,专业。想象一下,现在您必须维护一个一直使用优雅API的代码,并且必须搜索完成删除调用的位置。您将搜索“ api / entity” ,然后在结果中必须查看哪个正在执行DELETE。甚至更糟的是,您有一个初级程序员,错误地用DELETE切换了PUT,并且URL发生了同样的事情。
在我看来,将动作动词放入URL中比使用适当的HTTP方法对该动作进行操作具有优势,即使该动作动词并不那么优雅。如果您想查看在何处进行删除调用,只需搜索“ api / entity / delete” ,即可直接找到它。
在不使用整个HTTP方法数组的情况下构建API可以使以后更易于使用和维护
答案 3 :(得分:0)
安全方法:获取资源/对资源不做修改
幂等:如果多次请求,资源状态不会改变
不安全的方法:在资源中创建或更新资源/修改
非幂等:如果多次请求,则更改资源状态
根据您的要求:
1)为了安全和幂等的操作(获取资源),请使用--------- 获取方法
2)对于不安全且非幂等的操作(插入资源),请使用--------- POST方法
3)对于不安全和幂等的操作(更新资源),请使用---------- PUT方法
3)对于不安全和幂等的操作(删除资源),请使用--------- 删除方法