我一直在实现一个RESTful Web服务,它具有以下操作:
列表文章:
GET /articles
删除文章(应仅删除选定的文章到垃圾箱):
DELETE /articles
列出垃圾桶中的文章:
GET /trash/articles
我必须实现一个操作,将“/ trash / articles”中的“文章”恢复回“/ articles”。
这是问题所在。你经常这样做吗?我必须使用什么网址?
我想出了两种方法。首先是:
DELETE /trash/articles
但它感觉很奇怪,用户可以像“永久删除它,不恢复”那样阅读它。
第二种方式是
PUT /trash/articles
哪个更奇怪,用户会对此操作的作用感到困惑。
我是REST的新手,所以请告知你如何正常工作。我试图在谷歌搜索,但我不知道如何正确的问,所以我没有得到一些有用的东西。
另一种选择可能是使用“查询参数”来定义一个“补充动作/动词”来覆盖你所拥有的这种“特殊条件”(假设HTTP动词不是很容易理解)。然后可以通过以下方式完成:
PUT /trash/articles?restore=true
这将使URI路径仍然抱怨REST指南(指的是资源,而不是编码“动作” - 如“恢复”)并且会改变你想做的“额外语义”(这是一个非常特殊的情况) )到“查询参数”。 “查询参数”非常常用于“过滤”REST中的资源,而不是用于这种情况......但根据您的要求,这可能是一个合理的假设。
我建议使用
PUT /restore/articles
要么
PUT /restore/trash/articles
迟到的答案,但在我看来,最好的方法是改变资源本身。
例如:
<article is_in_trash="true">
<title>come title</title>
<body>the article body</body>
<date>1990-01-01</date>
</article>
因此,为了从废纸篓中删除文章,您可以简单地使用PUT文章的更新版本,其中is_in_trash="false"
。