什么是宁静的Web服务方法类型意味着什么?

时间:2014-11-25 06:19:05

标签: web-services rest restful-architecture

我不是Web服务的新手,但我无法理解在restful Web服务中使用http方法类型。

我指的是vogella教程

http://www.vogella.com/tutorials/REST/article.html#rest_httpmethods

他们有以下描述,我无法理解

  • GET定义资源的读取访问权限,没有副作用。资源永远不会通过GET请求更改,例如,请求没有副作用(幂等)。

(这很好。这里没有查询)

  • PUT创建一个新资源。它也必须是幂等的。

(好吧似乎合乎逻辑,但是它必须是幂等的我为什么要关心呢?我不会再使用相同的数据再次调用此服务。)

  • DELETE删除资源。这些操作是幂等的。它们可以重复而不会导致不同的结果。

(同样的问题,为什么我一旦删除了删除查询,为什么还要重复删除?)

  • POST更新现有资源或创建新资源。

(这很好)

我也可以使用get和post方法删除和放置数据,我知道我无法理解,但为什么我应该使用额外的方法类型删除 put ,Web服务中提供的内容以及它的用途是什么?

2 个答案:

答案 0 :(得分:1)

最广泛使用的“已知” HTTP方法是GET和POST。但是还有其他方法,每种方法都有不同的语义。我们需要选择对请求要执行的操作具有最正确含义的方法,并且对于那些只熟悉GET和POST的人来说,不应该“愚弄”语义。

删除即可。语义如下。一旦为给定资源处理了DELETE请求,就无法再访问该资源,无论是客户端,还是ifs,ands或buts。将来尝试使用GET或HEAD检索此资源状态表示的任何请求都应生成404。

话虽如此,如果操作的语义符合上述描述,我们必须使用DELETE。任何更少的东西,比如“软”删除或其他一些状态改变的交互,都不应该用DELETE来完成,更好的是使用POST。所以它归结为语义,为什么使用DELETE。

至于问题“为什么我想在删除查询后重复删除查询?”,我们不会,如果我们要尝试再次使用完全相同的DELETE请求,它会产生相同的效果。这就是幂等性的意义。它与为什么无关。它只是保证协议语义

<强> PUT 即可。它主要用于更新服务器资源,或创建用户资源。在这两种情况下,URI都是用户已知的,并且是请求的URI。例如

PUT /customers/1234
// some body with name to change

资源URI已知,客户端发布带有表示的消息以更新资源。如果请求的操作符合这些要求,则应使用PUT 。相反,如果我们要创建一个新的服务器资源(客户),那么我们将使用POST

POST /customer
// customer representation

请注意,新客户的URI未知,因为尚未创建。如果POST id成功,我们应该返回带有新URI的Location标头

HTTP/1.1 201
Location: /customers/12345

在切线方面稍微偏离了一点,但又回到了PUT。 PUT是幂等的,因为无论我们做出多少次上述PUT请求,结果都是相同的。不会影响服务器状态。另一方面,如果我们重复发出相同的POST请求,则可能会创建更多新客户

尽管如此,我们应该尽力遵循协议语义。 POST就像是一个不能应用于任何其他方法语义的操作的外卡。

要回答你重复的问题,“我为什么要关心?”,正如DELETE所指出的那样,幂等只是保证协议语义的问题,它不是的问题但我从来没有打算再次做这个操作“,这是的问题”如果某人确实再次执行了这个确切的操作,那就没有效果“

答案 1 :(得分:0)

在restful api中主要使用四种方法。它们是:

  • 获取 - 用于获取一些资源
  • POST - 用于创建资源
  • 删除 - 用于删除资源
  • PUT - 用于更新资源。 如上所述,我们可以使用post或get来放置和删除函数。但是在编程中我们可以使用这个方法来指示其目的,以便其他人知道代码在做什么