[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
質問
クライアントがオブジェクトを保存できるサーバーを構築しています。 これらのオブジェクトは、クライアント側で完全に構築され、オブジェクトの全寿命期間にわたって永久的なオブジェクトIDを備えています。
クライアントがPUTを使ってオブジェクトを作成または変更できるように、APIを定義しました。
PUT /objects/{id} HTTP/1.1
...
{json representation of the object}
id}はオブジェクトIDなので、Request-URIの一部となります。
今、クライアントがPOSTを使ってオブジェクトを作成できるようにすることも考えています。
POST /objects/ HTTP/1.1
...
{json representation of the object, including ID}
POST は "append" 操作として意味されるので、オブジェクトがすでに存在する場合にどうすればよいのかわかりません。 このリクエストを修正リクエストとして扱うべきなのか、それとも何らかのエラーコードを返すべきなのか(どの)?
どのように解決するのですか?
私が感じたことは
409 Conflict
が最も適切だと思いますが、もちろん、野生ではめったに見られません。
リソースの現在の状態との衝突のため、リクエストを完了できませんでした。このコードは、ユーザーが競合を解決してリクエストを再送信できるかもしれないと予想される状況においてのみ許可されます。応答ボディは、ユーザーがコンフリクトの原因を認識するために十分な情 報を含むべきである[SHOULD]。理想的には、応答ボディはユーザーまたはユーザーエージェントが問題を解決 するのに十分な情報を含むだろう。しかし、それは可能ではないかもしれず、必須では ない。
競合は、PUTリクエストに対する応答で発生する可能性が最も高い。例えば、バージョン管理が使用され、PUTされるエンティティが、以前の(サードパーティの)リクエストによってなされたものと衝突するリソースへの変更を含んでいた場合、サーバーはリクエストを完了できないことを示すために409応答を使用するかもしれない。この場合、応答エンティティは、おそらく応答のContent-Typeで定義される書式で、2つのバージョン間の差分のリストを含むだろう。
関連
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] POSTとPUT HTTP REQUESTの違いは何ですか?
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] HTTP DELETE リクエストにエンティティボディは許されますか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み] [Solved] リクエストに必須パラメータがない場合、どのようなHTTPステータスレスポンスコードを使用すればよいですか?
-
[解決済み】データのPOSTに対する400と422のレスポンス
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 403 Forbiddenと401 UnauthorizedのHTTPレスポンスの比較
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] API のバージョン管理に関するベストプラクティス?[クローズド]
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] cURLでPUTリクエストを行うには?
-
[解決済み] REST API 認証
-
[解決済み] RESTのPUT/POST/DELETEコールは、規約によって何を返すべきですか?
-
[解決済み] RESTでトランザクション?
-
[解決済み] RESTとは?若干の混乱【終了
-
[解決済み] RESTを使った複数レコードの削除