如何使用 CRUD 实现可撤消的删除


  • 可撤消的删除是DELETE操作还是UPDATE操作?(除非设置特殊标志,否则删除的条目在GET中不可见)

  • 只有真正的删除才是DELETE操作吗?

  • 撤消删除的最佳方法是什么?作为UPDATE还是作为带有undo旗帜的DELETE

我不是 RESTful API 设计方面的专家,但这是一个愚蠢的问题,所以我想我会给出我的想法(我相信这个问题纯粹是基于意见的)

首先,鉴于您的决定的影响很小,我不会为了遵循一些"标准"而交易任何东西(如果有此类行动的话)。但是,如果是输入一件事或另一件事的情况,这是我的想法。

DELETE 应该是幂等的,如果你删除,它就永远消失了。因此,"标准"规定您不应该发布 DELETE,除非您真的希望该资源消失。

从本质上讲,您正在做的是通过声音存档资源,因此您移动了资源。 RFC 2518定义一个 MOVE 方法在这里可能很有用。然后,您可以将资源移入和移出"存档"。

如果您不喜欢 MOVE,可以修补资源以将其设置为存档或软删除。PATCH 本质上与 PUT 相同,只是您可以指定资源的单个属性,而不是 PUT 返回整个资源对象。

我认为这是仅有的两种合适的方法。如果你想坚持使用获取、发布、放置、删除的 3 或 4 个核心方法。我会说使用 DELETE 来存档和完全删除,要么用一个标志来指定它是软删除还是硬删除,或者只是让它成为第一个 DELETE 存档,而存档上的 DELETE 是硬删除。

说了这么多,只要你的API有记录,我就不会太担心。做任何你觉得最合适和最明智的事情。希望这能给你一些可以思考的东西,并帮助你做出决定。我不认为你会得到一个"标准说做XYZ"的答案。