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

时间:2014-05-21 08:20:22

标签: http rest asp.net-web-api

我正在使用asp.net web API(RESTful服务),我可以通过提供一些额外的参数来使用post方法进行删除,插入和更新操作。它仅用于可以区分功能的单词的语义用法吗?

我找到了很好的帖子Here。有一些疑问如下

  1. 我可以使用POST发布数据,然后使用PUT
  2. 我可以通过POST删除已删除的ID来删除DELETE
  3. 当服务器端收到每个头文件的头文件时会发生什么。
  4. 请同样帮忙。感谢..

2 个答案:

答案 0 :(得分:2)

HTTP中有四种基本方法:GET,POST,PUT和DELETE。大部分时间都使用GET。它用于任何安全的,不会产生任何副作用。 GET可以被加入书签,缓存,链接,通过代理服务器。这是一个非常强大的操作,非常有用的操作。

相反,POST可能是最强大的操作。它可以做任何事情。对于可能发生的事情没有限制,因此,你必须非常小心。你没有为它添加书签。你没有缓存它。你不预先取它。在不询问用户的情况下,您不对POST执行任何操作。你想这样做吗?如果用户按下按钮,您可以POST一些内容。但是你不会看到页面上的所有按钮,而是开始随机按下它们。相比之下,浏览器可能会查看页面上的所有链接并预先获取它们,或者预先获取他们认为最有可能遵循的链接。事实上,一些浏览器和Firefox扩展以及各种其他工具已经尝试过这样做。

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,零请求和一个请求之间存在很大差异,但是一个请求和十个请求之间没有区别。

实施例

POST:

用于修改和更新资源

POST / questions / HTTP / 1.1 主持人:wahteverblahblah.com 请注意以下是错误:

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

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

您可以使用POST来创建资源:

POST /questions HTTP/1.1
Host: wahteverblahblah.com

请注意,在这种情况下,未指定资源名称,将返回新对象URL路径。

PUT:

用于创建资源或覆盖它。在指定资源新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/

答案 1 :(得分:2)

REST架构的架构属性之一是“简洁的接口”。 GET,POST,PUT等是早期可用的众所周知的HTTP动词。 REST仅定义了如何使用它们来实现RESTFUL实现。如果您遵循它们,那么您正在执行RESTful实现,如果不是......您正在做一些只有您知道的事情。

您也可以使用GET删除记录(通过在查询字符串中提供ID并编写底层实现来删除QS中提供的任何ID)但是如果我在梦想世界之外的人将如何知道通过GET执行此操作,记录将被删除。

REST架构为所有动词分配了一个目的,以便每个人都知道将要发生什么。如果你不遵循它们,你就会创造一些不标准的东西。

如果按照REST的定义(来自wiki):

  

Representational state transfer(REST)是一种软件架构   样式由应用于组件,连接器和数据元素的一组协调的体系结构约束组成   分布式超媒体系统。 REST会忽略组件的详细信息   实现和协议语法,以专注于角色   组件,与他们互动的约束   组件及其对重要数据元素的解释。