我很困惑你何时以及为什么要在REST中使用特定动词?
我知道基本的事情:
Get -> for retrieval
Post -> adding new entity
PUT -> updating
Delete -> for deleting
这些属性是按照我上面写的操作使用的,但我不明白为什么? 如果在REST中的Get方法内部我会添加一个新实体或在POST内部更新一个实体会发生什么?或者可能在DELETE里面我添加一个实体。我知道这可能是一个noob问题,但我需要了解它。这对我来说听起来很混乱。
答案 0 :(得分:10)
@archil has an excellent explanation滥用动词的陷阱,但我会指出规则并不像你所描述的那样严格(至少就协议而言)。
万维网的整个HTML版本相当顺利,没有PUT或DELETE,使用POST进行删除或更新完全没问题,但是如果你可以支持PUT和DELETE进行更新和删除(以及其他幂等操作)它只是好一点,因为代理可以假设操作是幂等的。
请参阅official W3C documentation了解有关安全性和幂等性的真实细节。
答案 1 :(得分:4)
协议是协议。它旨在定义与之相关的每个规则。 Http也是协议。以上所有规则(包括http动词规则)均由http协议定义,其用法由http协议定义。如果您不遵守这些规则,则只有您了解服务中发生的情况。它不会遵循协议规则,并且会让其他用户感到困惑。关于使用GET请求删除图片的着名照片网站(无关紧要)有一个例子。一旦该网站的用户安装了谷歌桌面搜索程序,就可以在本地获取页面。由于该程序知道GET操作仅用于获取数据,并且不应影响任何内容,因此它对每个可用URL(包括那些GET-delete URL)发出GET请求。当用户登录并且cookie在浏览器中时,没有授权问题。结果 - 由于http协议和GET动词的使用不正确,所有用户照片都在服务器上删除了。这就是为什么你应该始终遵循你正在使用的协议规则。虽然技术上可行,但是覆盖定义的规则是不对的。
答案 2 :(得分:2)
使用GET删除资源就像拥有一个命名和记录的函数,以向数组中添加一些东西,从数组中删除某些内容。 REST只有一些定义良好的方法(HTTP动词)。您服务的用户希望您的服务坚持这些定义,否则它不是RESTful Web服务。
答案 3 :(得分:1)
如果您这样做,则无法声称您的界面是RESTful。 REST原则要求指定的动词执行您提到的操作。如果他们不这样做,那么它就不能称为RESTful接口。