大量のデータを削除する可能性のあるDELETEクエリでは、REST APIが盲目的に進んでいるか、警告を出して確認を求められるでしょうか?REST APIは、後ろのデータを保護する必要がありますか?
私は、リレーショナルDBに格納された複雑なデータの操作を抽象化するAPIを構築しています。他のアイテムによって参照されているアイテムを削除すると、それらを論理的に削除してからカスケードする必要があります。
単純な例は、3つの「ツリー/ブランチ/リーフ」テーブルのセットです。リーフ・ローはブランチのIDへの外部キーを持ち、ブランチ・ローは同様にツリーIDを含みます。 APIは任意のレベルでDELETEを有効にしますが、ツリー項目を削除すると、その項目を直接的または間接的に参照するすべてのブランチとリーフが削除されます。
だから、ツリーのためのDELETEクエリに、APIができます
- ちょうどあなたが依存するすべての項目を削除する必要がありますように、すべてのカスケード削除
- は、それが整合性を破るだろうという理由で拒否遵守してみませんか手動で最初に(実際には実用的でない)
- 何も削除せずに「これは1つのツリー、31のブランチと987のリーフを削除します。確認してください。確認はURL(/ force)の追加ヘッダーやサフィックスの形を取ることができますが、どちらもRESTではないので、クライアントの作成時に直接このようなことを直接バイパスすることがあります(delete + confirmクエリのみが実際に送られます)。私はまた、そのような返事のHTTPコードをためらっています。
私は、APIがシンプルに保たれていて、かつての保護がクライアントにあるべきだと思う傾向がありますが、外部の知恵に感謝します。
あなたの考えに感謝します。私は、すべてをあまり変更せずに、「削除しない」アイデアを試してみて、削除を簡単にし、可能な限り復元すると思います。しかし、RESTモデルにその削除を適合させる方法についてはまだ考えていません。 – Tehel
@Thehelの1つの可能性は、アイテムを別の「ゴミ箱」コレクションで利用できるようにすることです。 – Evert