我一直在实现具有以下操作的RESTful Web服务:
列出文章:
GET /articles
Run Code Online (Sandbox Code Playgroud)
删除文章(只能将选定的文章删除到垃圾箱中):
DELETE /articles
Run Code Online (Sandbox Code Playgroud)
列出垃圾箱中的文章:
GET /trash/articles
Run Code Online (Sandbox Code Playgroud)
我必须执行一项操作,以将“文章”从“ /垃圾箱/文章”还原回“ /文章”。
这是问题。你平时怎么做?我必须使用什么网址?
我想出了两种方法。第一个是:
DELETE /trash/articles
Run Code Online (Sandbox Code Playgroud)
但是感觉很奇怪,用户可以像“永久删除它,不要还原”那样阅读它。
第二种方法是
PUT /trash/articles
Run Code Online (Sandbox Code Playgroud)
这更奇怪,并且用户将对该操作的执行感到困惑。
我是REST的新手,所以请建议您通常如何做。我尝试在Google中搜索,但不知道如何正确查询,因此没有得到任何有用的信息。
另一种选择是使用“查询参数”来定义一个“补充动作/动词”,以覆盖您拥有的“特殊条件”(假设HTTP动词不太容易覆盖)。然后可以例如通过以下方式完成此操作:
PUT /trash/articles?restore=true
这将使URI路径仍然受到REST准则的抱怨(指的是资源,而不是对“操作”进行编码-如“恢复”),并且会改变您想做的事情的“额外语义”(这是非常特殊的情况) )添加到“查询参数”。“查询参数”非常常用于REST中的“过滤”资源,在这种情况下使用的不是很多...但是,考虑到您的要求,这也许是一个合理的假设。