Rup*_*tel 83 http httprequest web-deployment web
我已经阅读了很多相关内容,但无法就此主题得出结论.
但我从未使用过PUT或DELETE HTTP Request方法.我倾向于在系统(我的应用程序或网站)的统计数据可能不受影响(如产品列表)时使用GET,并在受影响时使用POST(下订单).是不够还是我错过了什么?
Gor*_*don 82
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
Run Code Online (Sandbox Code Playgroud)
甚至更糟
POST http://example.com/deleteOrder/id/1
Run Code Online (Sandbox Code Playgroud)
通过HTTP有效地隧道化CRUD语义.但动词从未打算成为URI的一部分.相反,HTTP已经通过HTTP方法向CRUD提供了机制和语义(例如,订单).HTTP是一种协议,而不仅仅是一些数据隧道服务.
因此,要删除网络服务器上的资源,您需要打电话
DELETE http://example.com/order/1
Run Code Online (Sandbox Code Playgroud)
并更新它你打电话
PUT http://example.com/order/1
Run Code Online (Sandbox Code Playgroud)
并在PUT正文中提供更新的资源表示,供Web服务器应用.
因此,如果要为REST API构建某种客户端,则可能会使其发送PUT和DELETE请求.这可以是在浏览器内部构建的客户端,例如通过JavaScript发送请求,或者可以是在服务器上运行的某些工具等.
欲了解更多详情,请访问:
Lim*_*eni 24
使用HTTP请求动词(如GET,POST,DELETE,PUT等)使您可以构建RESTful Web应用程序.在这里阅读:http://en.wikipedia.org/wiki/Representational_state_transfer
从中看到好处的最简单方法是查看此示例.每个MVC框架都有一个Router/Dispatcher
将URL-s映射到actionControllers的框架.所以这样的URL:/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
Run Code Online (Sandbox Code Playgroud)
但如果你想删除第1条,你会这样做:
DELETE /blog/article/1 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
请注意,两个HTTP请求都具有相同的URI,/ blog/article/1,唯一的区别是HTTP Request动词.并且基于该动词,您的路由器可以调用不同的actionController.这使您可以构建整洁的URL.
阅读这两篇文章,他们可能会帮助您:
这些文章是关于Symfony 2框架的,但它们可以帮助您弄清楚HTTP请求和响应如何工作.
希望这可以帮助!
虽然我冒着不受欢迎的风险,但我说它们现在没有用了。
我认为它们在过去是很好的和有用的,例如 DELETE 告诉服务器删除在提供的 URL 上找到的资源,PUT(及其兄弟 PATCH)告诉服务器以幂等方式进行更新。
事情的发展和 URL 变得虚拟(例如,请参阅url 重写)使资源失去了真实文件夹/子目录/文件的初始含义,因此,HTTP 协议方法(GET、POST、PUT/PATCH、DELETE)涵盖的 CRUD 动作动词失去了踪迹.
让我们举个例子:
左侧没有写 HTTP 方法,本质上没有关系(POST 和 GET 就足够了),右侧使用了适当的 HTTP 方法。
右侧看起来优雅,干净,专业。想象一下,现在您必须维护一个一直在使用优雅 API 的代码,并且您必须搜索执行删除调用的位置。您将搜索“api/entity”,在结果中您必须查看哪个正在执行 DELETE。或者更糟糕的是,你有一个初级程序员,错误地将 PUT 与 DELETE 切换,因为 URL 发生了同样的事情。
在我看来,将动作动词放在 URL 中比为该动作使用适当的 HTTP 方法更有优势,即使它不是那么优雅。如果您想查看删除调用的位置,只需搜索“api/entity/delete”即可立即找到。
构建一个没有整个 HTTP 方法数组的 API 可以更容易地使用和维护
归档时间: |
|
查看次数: |
111118 次 |
最近记录: |