DELETE 不可の場合の REST HTTP ステータスコード
質問
私の質問は、HTTP ステータスコードに関する非常に一般的なものです。 DELETE がリソース上で不可能な場合(ただし、ユーザーの権利に関するものではない)、HTTPステータスコードについてです。
リソースの種類でRESTful APIがあります。
は、その DELETE メソッドはリソースに対して認可されていますが、いくつかの条件下ではリソースを削除することができません (このリソースにバインドされたデータがある場合)。
この状況でクライアントに返すべき正しい HTTP ステータスコードは何でしょうか?
私が集めた可能性のいくつかと、それが私のケースで不適切と思われる理由は次のとおりです。
- 403 ( 禁止 ) : ユーザーの権限と関係があるようです。
- 405 ( メソッドは許可されていません ) : このタイプのリソースに対して、APIはこのメソッドに応答するように設計されていないようです。
- 409 ( 競合 ) : 適切なように見えますが、クライアントはAPIとの衝突を解決する可能性を持つべきですが、ここではそうではありません。
更新: リソースを削除できないようにするデータバインディングは、REST APIを介して変更することはできません。しかし、リソースの状態を変更する可能性のある他のアプリによって、データが由来するデータベースがアクセスされるため、他の方法でリソースを解放することができます (DB の SQL DELETE は常にそれを行うことができます)。
どのように解決するのですか?
RFCの文言からすると、409が最も適切だと思います。
409 (Conflict) ステータスコードは、リクエストの実行が が原因で完了できなかったことを示します。 の状態との競合により、リクエストを完了できなかったことを示します。 リソース . このコードは、ユーザが が である が競合を解決してリクエストを再送信できるような状況で使われます。 サーバーは は、ユーザーが競合の原因を認識するのに十分な情報を含むペイロードを生成すべきです。 を生成すべきである。
(強調)
質問文の記述を理解した上で、DELETEが許可されない理由は、正確には 対象リソースの現在の状態との衝突です。 . RFCに示されているように、レスポンスペイロードは理由の表示を与えることができ、また 任意で ユーザ は は解決できるかもしれない。APIが衝突解決の可能性を提供しないからといって、409を不適切にするような仕様は見当たりません。
関連
-
[解決済み] 403 Forbiddenと401 UnauthorizedのHTTPレスポンスの比較
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み] REST APIサービスが検証に失敗した場合に返すべき適切なHTTPステータスコードは何ですか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み] REST HATEOAS(成熟度3)の有用性/重要性とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースとエンドポイントの違いは何ですか?
-
[解決済み] RESTfulな方法でリソースのサーバーサイドメソッドを呼び出す
-
[解決済み] RESTを使った複数レコードの削除
-
[解決済み] REST URIのバージョンアップ方法
-
[解決済み] アイテムを大量に削除するためのRestfulな方法
-
[解決済み] そのREST APIは本当にRPCなのか?ロイ・フィールディングはそう考えているようだ
-
[解決済み] 非推奨APIをクライアントに通知するためのHTTPレスポンスヘッダに関する規約
-
[解決済み] RESTful APIはステートレスである」をどう理解するか?
-
[解決済み] HATEOAS: 絶対URLか相対URLか?
-
公開APIのリソースにUUIDを使うべきですか?