1
在DELETE查询中,如果我的REST API盲目地继续或警告它并要求确认,可能会级联移除大量数据?REST API应该保护背后的数据吗?
我正在构建一个API,用于抽象存储在关系数据库中的复杂数据的操作。删除其他项目引用的项目应逻辑上删除它们,然后级联。
一个简单的例子(与真实案例无关)将是一组三个“树/分支/叶”表:叶子行对分支的ID有一个外键,并且分支行同样包括树ID。 API可以在任何级别启用DELETE,但是如果删除树项目,它将内部级联以删除直接或间接引用它的所有分支和叶子。
等了一树删除查询,该API可以:
- 只是遵守并执行所有级联清除
- 拒绝,理由是它会破坏完整性,所以你必须删除所有相关项目先手动(不太实际)
- 不要删除任何东西并发回语句“这样会删除1棵树,31个分支和987棵树叶,请确认”。确认可以采取URL(/ force)中额外的头部或后缀的形式,但这两者都不是非常REST,并且根据我的经验,在编写客户端时(通常只发送delete + confirm查询),这些东西通常会被直接绕过。我也犹豫在HTTP代码上这样回复。
我倾向于认为API应该保持简单,并且应该在客户端使用Foolsafe保护,但会欣赏外部智慧。
感谢您的想法。我想我会尝试'不删除'的想法,但不要过多地改变任何内容,从而使删除变得简单并且可以恢复。尽管如此,还是不知道如何在REST模型中取消删除。 – Tehel
@Tehel有一种可能性是使物品在单独的“垃圾”集合中可用。 – Evert