小编Cal*_*leb的帖子

RESTful取消删除

支持数据服务的取消删除或延迟/批量删除是一个相当普遍的要求.我想知道的是如何以RESTful方式实现它.我在几个不同的选择之间徘徊(其中没有一个对我来说似乎非常有吸引力).我认为,这些不同选项的共同点是需要一个API,它返回标记为特定资源类型的已删除的所有资源.

以下是我考虑过的一些选项以及它们的一些优点/缺点:

将资源标记为已删除的选项:

  • 使用HTTP DELETE将资源标记为已删除.
  • 使用HTTP PUT/POST更新已删除的标志.这感觉不对,因为它将基本上是删除的内容从HTTP DELETE方法映射到其他HTTP方法.

GET-ing资源标记为删除时的选项:

  • 返回标记为已删除的资源的HTTP状态404.干净透明,但我们如何区分真正删除的资源与刚删除的资源之间的区别.
  • 返回HTTP状态410.提供告知差异的方法,但410从技术上说它"应该被认为是永久性的.具有链接编辑功能的客户端应该在用户批准后删除对Request-URI的引用." 这里的"预期"和"应该"这两个词可能有足够的摆动空间.不确定客户端中410的支持/理解程度如何.
  • 返回HTTP状态200并包括指示资源被删除的标志字段.这似乎很奇怪,因为首先删除它的想法是因为你实际上想要它不出现.这推动了将已删除资源过滤到客户端的责任.

包含此已删除资源的响应选项:

  • 省略被删除的资源.干净简单.但是,如果您真的想了解已删除的资源,该怎么办?
  • 将它们与表示已删除的字段一起包括在内.这推动了将已删除资源过滤到客户端的责任.如果您只想浏览活动或已删除的资源,则会使分页变得棘手.

更新标记为删除的资源时的选项:

  • 使用HTTP状态404.资源是否正确?但是,如何区分标记为已删除的资源和实际删除的资源之间的区别.404响应中的HTTP正文可以在此消除歧义,但随后客户端将解析/解释您的正文以消除歧义.也许响应标题可能有帮助吗?哪一个?自定义标题?
  • 使用HTTP状态409以及有关必须首先取消删除资源的消息.

取消删除标记为删除的资源的选项:

  • 使用HTTP PUT/POST进行资源的更新操作,并将其标记为活动状态.这只有在您没有为资源的GET操作返回HTTP 404时才有效,因为它自从PUT/POST到"未找到"的资源(404)后才会生成.
  • 使用HTTP PUT/POST进行资源的创建操作.这里的问题是哪些数据优先?在创建操作中发送的数据?或者正在取消删除的数据?将其从任何其他可能返回的查询中过滤掉.然后,如果资源标识符指向标记为已删除的资源,则将创建资源的HTTP PUT/POST视为取消删除.
  • 单独的REST路径专用于取消删除标记为删除的资源.

这绝不是一份详尽的清单.我只是想列举一些在我脑海中蹦蹦跳跳的选项.

我知道如何做到这一点的答案就像往常一样,"它取决于".我很好奇的是你会用什么资格/要求做出决定?您是如何看待自己实施或实施的?

rest http undelete http-delete

54
推荐指数
5
解决办法
5385
查看次数

标签 统计

http ×1

http-delete ×1

rest ×1

undelete ×1