http中GET,PUT,DELETE,POST方法的实际使用



我使用asp.net web API(RESTful服务),我可以使用post方法通过给出一些额外的参数来删除,插入和更新操作。是否仅用于区分功能的词的语义用法?

我在这里找到了很好的SO帖子。以下是一些疑问

  1. 我可以使用POST来发布数据,那么为什么PUT
  2. 我可以通过传递删除id通过POST删除,那么为什么DELETE
  3. 当服务器端接收到这些头方法时会发生什么?

请协助。谢谢. .

REST架构的架构属性之一是"接口的简单性"。GET、POST、PUT等都是以前可用的HTTP动词。REST只定义了如何使用它们来实现RESTFUL实现。如果你遵循它们,你就是在做RESTful实现,否则…你在做一些只有你自己知道的事情。

您也可以使用GET来删除记录(只需在查询字符串中提供ID并编写底层实现来删除QS中提供的任何ID),但是如果我使用GET这样做,您的梦想世界之外的人如何知道记录将被删除?

所有的动词都被REST架构指定了一个目的,这样每个人都知道将要发生什么。如果你不遵循它们,你就是在创造不标准的东西。

如果你遵循REST的定义(来自wiki):

具象状态传输(REST)是一种软件架构style由应用于组件、连接器和数据元素的一组协调的体系结构约束组成分布式超媒体系统。REST忽略组件的细节实现和协议语法,以便重点讨论角色组件,它们与其他组件交互时的约束组件,以及它们对重要数据元素的解释

HTTP中有四种基本方法:GET、POST、PUT和DELETE。大多数情况下使用GET。它用于任何安全的东西,不会产生任何副作用。GET可以被添加书签、缓存、链接,并通过代理服务器传递。这是一个非常强大的操作,非常有用的操作。

相比之下,

POST可能是最强大的操作。它可以做任何事情。对于可能发生的事情没有限制,因此,你必须非常小心。你不会把它收藏起来。你不缓存它。你不用预取它。如果不询问用户,就不能对POST做任何事情。你想这么做吗?如果用户按下按钮,则可以POST一些内容。但是你不可能看到页面上的所有按钮,然后随机地按下它们。相比之下,浏览器可能会查看页面上的所有链接并预取它们,或者预取它们认为最有可能被点击的链接。事实上,一些浏览器和火狐扩展以及其他各种工具都在尝试这样做。

PUT和DELETE位于GET和POST之间。PUT或DELETE与POST之间的区别在于PUT和DELETE是幂等的,而POST则不是。如果需要,可以重复执行PUT和DELETE操作。假设您正在尝试向站点上传一个新页面。假设您想在http://www.example.com/foo.html上创建一个新页面,那么您输入您的内容并将其放在该URL上。服务器在您提供的URL上创建该页面。现在,让我们假设由于某种原因,您的网络连接中断了。你不确定,请求是否通过了?也许网络很慢。也许是代理服务器出了问题。所以你完全可以再试一次,或者再试一次——想试多少次就试多少次。因为把同一个文档放到同一个URL上十次和放一次没有什么不同。对于DELETE也是如此。你可以删除一个东西十次,这和删除一次是一样的。

相比之下,POST每次都可能导致不同的事情发生。想象一下,您正在按下"购买"按钮从在线商店结账。如果您再次发送POST请求,您可能会再次购买购物车中的所有东西。如果你再寄一次,你已经买了第三次了。这就是为什么浏览器在没有用户明确同意的情况下必须非常小心地重复POST操作,因为如果执行两次,POST可能导致两件事发生,如果执行三次,则可能导致三件事发生。对于PUT和DELETE, 0个请求和1个请求之间有很大的区别,但是1个请求和10个请求之间没有区别。

:

用于修改和更新资源

POST/questions/HTTP/1.1主持人:wahteverblahblah.com请注意,下面是一个错误:

POST /questions/<new_question> HTTP/1.1
Host: wahteverblahblah.com

如果URL尚未创建,则不应该在指定名称时使用POST来创建它。这将导致"资源未找到"错误,因为还不存在。你应该先把资源放到服务器上。

你可以这样做来创建一个资源使用POST:

POST /questions HTTP/1.1
Host: wahteverblahblah.com

注意,在这种情况下,没有指定资源名,新对象的URL路径将返回给您。

说:

用于创建或覆盖资源。当你指定资源新URL时。

对于新资源:

PUT /questions/<new_question> HTTP/1.1
Host: wahteverblahblah.com
To overwrite an existing resource:
PUT /questions/<existing_question> HTTP/1.1
Host: wahteverblahblah.com

也可以看看http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/

相关内容

最新更新