用于从垃圾箱还原操作的RESTful URL

用于从垃圾箱还原操作的RESTful URL,rest,Rest,我一直在实现一个RESTful web服务,它具有以下操作: 列出文章: GET /articles 删除文章(应仅将选定的文章删除到垃圾箱): 列出垃圾箱中的物品: DELETE /articles GET /trash/articles 我必须执行一项操作,将“文章”从“/trash/articles”恢复到“/articles”。 这就是问题所在。你通常怎么做?我必须使用什么url 我想出了两种方法。第一个是: DELETE /trash/articles 但这

我一直在实现一个RESTful web服务,它具有以下操作:

列出文章:

GET     /articles
删除文章(应仅将选定的文章删除到垃圾箱):

列出垃圾箱中的物品:

DELETE  /articles
GET     /trash/articles
我必须执行一项操作,将“文章”从“/trash/articles”恢复到“/articles”。

这就是问题所在。你通常怎么做?我必须使用什么url

我想出了两种方法。第一个是:

DELETE  /trash/articles
但这感觉很奇怪,用户可以像“永久删除它,不恢复”一样阅读它

第二种方法是

PUT     /trash/articles
更奇怪的是,用户会对该操作的作用感到困惑


我是新来休息的,所以请告诉我你通常怎么做。我试着在谷歌上搜索,但我不知道如何提问,所以我没有找到有用的东西。

我建议使用

PUT /restore/articles


另一种选择是使用“查询参数”来定义“补充动作/动词”,以涵盖您的“特殊情况”(假设HTTP动词不太容易涵盖)。这可以通过以下方式实现:

PUT/trash/articles?restore=true


这将使URI路径仍然符合REST准则(引用资源,而不是编码“操作”-如“还原”),并将要执行的操作(这是一种非常特殊的情况)的“额外语义”转换为“查询参数”。“查询参数”通常用于“过滤”REST中的资源,而不是用于这种情况。。。但考虑到您的需求,这可能是一个合理的假设。

请稍后回答,但在我看来,最好的方法是更改资源本身

例如:


头衔
文章正文
1990-01-01

因此,为了将文章从垃圾箱中删除,您可以简单地使用PUT更新版本的文章,其中
is_in_Trash=“false”

第二个比第一个的优点是,您可以从何处维护许多要还原的源。如果您仅使用/restore,则意味着从所有来源和所有内容进行恢复。非常感谢Adarsh。这确实很有帮助,但我发现emgsilva的回答有点谨慎。在严格的RESTAPI中,应该避免在路由/URL中使用动词。其思想是对资源使用HTTP方法(动词)来执行某些操作
PUT /restore/trash/articles