首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RESTful软删除

RESTful软删除
EN

Stack Overflow用户
提问于 2013-04-05 16:38:34
回答 2查看 17.1K关注 0票数 49

我正在尝试构建一个RESTful应用程序,其中我使用了GET、POST、PUT和DELETE。但我有一个问题,关于删除在这个特定的应用程序中的使用。

先介绍一下背景:

我的webapp管理的是在另一个系统中也被管理的通用实体(而且总是被创建的)。因此,在我的webapp中,每个实体都将以唯一的键存储在数据库中。但是,我们通过URL访问它们的方式是使用其他系统的唯一密钥。

我认为,一个简单的例子就能清楚地说明这一点。接受URL /entity/1。这将显示其他系统中ID为1的实体的信息,而不是我自己的系统。实际上,我的系统中的In将被完全隐藏。在我自己的系统中,没有访问ID为1的实体的URL方案。

好了,现在我们知道我的we应用程序是如何构造的了,让我们回到删除这些实体。

有一种方法可以“删除”我的系统中的实体,但是我在它周围加上引号,因为它实际上不会从数据库中删除它们。相反,它将用一个属性标记它们,以防止它在您进入/entity/1时出现。

因此,我觉得我应该使用PUT (以这种方式删除将是幂等的),因为从数据的角度来看,我只是简单地设置了一个属性。

那么,问题是: RESTful方法是否对数据有保真度(在这种情况下,很明显我是PUTing),或者是应用程序中数据的表示(在这种情况下,我似乎是DELETEing)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 16:42:11

您应该使用DELETE

您打算对数据进行的操作称为“软删除”:您设置了一个标志,避免了标记项的出现。这是内部的你的网页应用,用户不需要知道你是软删除,而不是删除或任何你想做的。这就是为什么应该使用DELETE动词的原因。

票数 81
EN

Stack Overflow用户

发布于 2021-05-04 09:43:04

我认为没有明确的答案。我将依赖于1.软删除、恢复和销毁操作是否是api的一个实际功能;或者2.软删除只是一种“偏执”的数据库工程模式。

  1. 对于api客户端来说,“软”删除是透明的,在这种情况下,使用DELETE动词似乎是可行的。 每件事都像是要一劳永逸地移除这个项目,但是工程师们想把它保存在数据库的某个地方。

  1. Api客户端具有恢复或破坏软删除资源的能力,在这种情况下,软删除和恢复可以在/resource/:id/softdelete等不同的动作url上使用/resource/:id/softdelete,而破坏操作将是使用DELETE的操作。 另一种方法可能是使用没有查询参数的DELETE进行软删除,并添加?destroy=true以实际销毁。但这种方法似乎不那么明确,更容易出错。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15839114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档