web-dev-qa-db-ja.com

RESTfulソフト削除

GET、POST、PUT、およびDELETEを利用するRESTfulWebアプリを構築しようとしています。しかし、この特定のアプリでのDELETEの使用について質問がありました。

最初に少し背景を説明します。

私のwebappは、別のシステムでも管理されている(そして、常に作成されている)汎用エンティティを管理しています。したがって、私のWebアプリケーション内では、各エンティティは一意のキーを使用してデータベースに保存されます。しかし、URLを介してそれらにアクセスする方法は、otherシステムの一意のキーを使用することです。

簡単な例でこれが明らかになると思います。 URL /entity/1を取得します。これにより、ID 1 他のシステム内のエンティティの情報が表示されますが、自分のシステムは表示されません。実際、私のシステムのIDは完全に非表示になります。私のシステムでは、IDが1のエンティティにアクセスするためのURLスキームはありません。

さて、Webアプリの構造がわかったので、これらのエンティティの削除に戻りましょう。

システム内のエンティティを「削除」する方法はありますが、実際にはデータベースからエンティティを削除しないため、引用符で囲みます。むしろ、/entity/1に移動したときに表示されないようにするプロパティでフラグを立てます。

このため、データの観点からは単にプロパティを設定しているだけなので、PUTを使用する必要があるように感じます(この方法で「削除」することはべき等になります)。

したがって、質問:RESTfulアプローチはデータに忠実ですか(この場合、私がPUTingであることは明らかです)、またはアプリ内のデータの表現(この場合、私はDELETEing)?

37
jamesplease

DELETEを使用する必要があります。

データを処理することを「ソフト削除」と呼びます。フラグを設定し、フラグが設定されたアイテムが表示されないようにします。これはWebアプリケーションの内部であり、ユーザーは、削除するのではなく、ソフト削除していることなどを知る必要はありません。これが、DELETE動詞を使用する必要がある理由です。

57
alestanis