我已经阅读了很多有关此的内容,但无法得出关于该主题的结论。
但是我从未使用过PUT或DELETE HTTP Request方法。我倾向于在系统状态(我的应用程序或网站)的统计信息不受影响(例如产品列表)时使用GET,而在系统统计信息受到影响(下订单)时使用POST。这还不够吗?我想念什么吗?
我已经阅读了很多有关此的内容,但无法得出关于该主题的结论。
但是我从未使用过PUT或DELETE HTTP Request方法。我倾向于在系统状态(我的应用程序或网站)的统计信息不受影响(例如产品列表)时使用GET,而在系统统计信息受到影响(下订单)时使用POST。这还不够吗?我想念什么吗?
Answers:
DELETE用于删除请求资源:
DELETE方法请求原始服务器删除由Request-URI标识的资源。在原始服务器上,人为干预(或其他方式)可能会覆盖此方法。即使从原始服务器返回的状态代码指示操作已成功完成,也不能保证客户机已执行了操作…
PUT用于在服务器上放置或更新资源:
PUT方法请求将封闭的实体存储在提供的Request-URI下。如果Request-URI引用了已经存在的资源,则应将封闭的实体视为驻留在原始服务器上的实体的修改版本。如果Request-URI没有指向现有资源,并且请求用户代理能够将该URI定义为新资源,则原始服务器可以使用该URI创建资源。
有关完整的规范,请访问:
不幸的是,由于当前的浏览器不支持HTML形式的POST和GET以外的其他动词,因此您通常无法充分利用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主体中提供更新的资源表示,以供Web服务器应用。
因此,如果要为REST API构建某种客户端,则可能会使它发送PUT和DELETE请求。这可能是内置在浏览器中的客户端,例如通过JavaScript发送请求,也可能是服务器上运行的某些工具,等等。
有关更多详细信息,请访问:
使用HTTP请求动词(例如GET,POST,DELETE,PUT等)使您能够构建RESTful Web应用程序。在此处阅读有关内容:http : //en.wikipedia.org/wiki/Representational_state_transfer
要从中受益的最简单方法就是看这个例子。每个MVC框架都有一个Router/Dispatcher
将URL映射到actionController的框架。因此,像这样的URL:/blog/article/1
会blogController::articleAction($id);
立即调用此路由器知道该URL或/blog/article/1/
但是,如果该路由器知道整个HTTP请求对象而不只是URL,那么他可以访问HTTP请求动词(GET,POST,PUT,DELETE ...)以及有关当前HTTP请求的许多其他有用信息。
这将使您能够配置应用程序,以便它可以接受相同的URL并根据HTTP请求动词将其映射到不同的actionController。
例如:
如果要检索第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请求和响应的工作方式。
希望这可以帮助!
Create
,1代表Delete
。如果这样做,您的下一个搜索将是“如何在单个控制器中具有多个Post操作”:P。这并不是很糟糕,但是您失去了通过动词操作实现唯一资源的能力,而不必在URI中显式提供操作名称。
尽管我冒着不受欢迎的风险,但我说它们如今已无用。
我认为它们在过去是很好的意图和用途,例如DELETE告诉服务器删除在提供的URL上找到的资源,而PUT(及其同级PATCH)告诉服务器以幂等方式进行更新。
事情发展了,URL变成了虚拟的(例如,参见URL重写),使资源失去了真正的文件夹/子用户/文件的初始含义,因此HTTP协议方法(GET,POST,PUT / PATCH,DELETE)覆盖的CRUD操作动词丢失了。
让我们举个例子:
左侧没有写HTTP方法,本质上没关系(POST和GET就足够了),右侧使用了适当的HTTP方法。
右侧看起来优雅,干净,专业。想象一下,现在您必须维护一直使用优雅API的代码,并且必须搜索删除调用的完成位置。您将搜索“ api / entity”,然后在结果中必须查看哪个正在执行DELETE。甚至更糟的是,您有一个初级程序员,错误地用DELETE切换了PUT,并且URL同样发生了。
在我看来,将动作动词放入URL中比使用适当的HTTP方法执行该动作具有优势,即使它不太优雅。如果您想查看在何处进行删除调用,只需搜索“ api / entity / delete”,即可直接找到它。
在不使用整个HTTP方法数组的情况下构建API可以使以后更易于使用和维护