2013-03-04 11 views

答えて

8

セマンティクスDELETEは、実際にオブジェクトを削除していることを意味します。あなたがここでやっていることは、オブジェクトの状態の変更のようです。この場合、PUTまたはPATCHがより適切です。

使用している統一インターフェイスのセマンティクス(この場合はHTTP動詞)を守る方がよいでしょう。それらがあなたのアプリ内で実際にやっていることと一致すれば、混乱は少なくなります。また、後でDELETEがレコードを "非アクティブ"とマークするのではなく、実際に削除することを決定したらどうしますか?これで、APIの動作が変更されました。また、DELETEを使用している場合、基本的に「最小の驚きの原則」に従います。これはAPIに適しています。 DELETEを実際に削除するのではなく、削除することをお勧めします。

一方、レコードをある場所から削除して、歴史的な目的でデータを保持する必要があることが判明した場合は、別の場所(レコードを別のテーブルに移動するなど)に移動しても問題ありません。この場合、そのレコードは今後の操作で使用できなくなります(つまり、リソース上のGET404を返します)。

+0

ほんの少し加え:[RFC-2616]によると、(http://tools.ietf.org/html/rfc2616#section-9.7 )サーバーは、リソースをアクセスできない場所に移動します。最後に、削除されたリソースの 'GET'は' 404'を返します。 – prehfeldt

+0

@prehfeldt正解!私は私の最後の段落でそれを言いました。追加の説明のために '404'についてのビットを追加しました。 –

4

無効にした操作の後に、再度アクティブにしない限り、「GET」によってエンドユーザーがリソースにアクセスできなくなると、「DELETE」を使用しても問題は発生しません。それ以外の場合は、「PUT」が適切です。

3

DELETEリクエストを送信したURLのリソースがそのURIで使用できなくなった場合は、DELETEが適切です。それがそこに残っているが状態を変えれば、そうではありません。

GET /friends/bob => 200 OK 
GET /formerfriends/bob => 404 Not Found 
DELETE /friends/bob => 204 No Content 
GET /friends/bob => 410 Gone 
GET /formerfriends/bob => 200 OK 

これではありません:

GET /friends/bob => 200 OK {"status"="friend"} 
DELETE /friends/bob => 204 No Content 
GET /friends/bob => 200 OK {"status"="formerfriend"} 
;(新しいリソースがプロセス中/ formerfriends /ボブに作成され、それは付随するリソース友人/ボブが消える/時)、これは大丈夫です

そのようなことは、より良いPUTまたはPATCHで扱うことになります。

GET /friends/bob => 200 OK {"status"="friend"} 
PATCH /friends/bob {"status"="formerfriend"} => 204 No Content 
GET /friends/bob => 200 OK {"status"="formerfriend"} 
関連する問題