我不是Web服务的新手,但我无法理解在restful Web服务中使用http方法类型。
我指的是vogella教程
http://www.vogella.com/tutorials/REST/article.html#rest_httpmethods
他们有以下描述,我无法理解
(这很好。这里没有查询)
(好吧似乎合乎逻辑,但是它必须是幂等的我为什么要关心呢?我不会再使用相同的数据再次调用此服务。)
(同样的问题,为什么我一旦删除了删除查询,为什么还要重复删除?)
(这很好)
我也可以使用get和post方法删除和放置数据,我知道我无法理解,但为什么我应该使用额外的方法类型删除和 put ,Web服务中提供的内容以及它的用途是什么?
答案 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中主要使用四种方法。它们是: