[解決済み] レスポンスコードが200または201で、内容がPOSTのリクエストを作成します。
質問
私が新しいデータ項目をシステムに追加することを意図したRESTサービスを書くとします。
にPOSTする予定です。
http://myhost/serviceX/someResources
仮にうまくいったとして、どのようなレスポンスコードを使えばいいのでしょうか?また、どのようなコンテンツを返せばよいのでしょうか。
私が見ているのは 定義 HTTP レスポンスコードに、このような可能性を見出すことができます。
200: 戻る アクションの結果を記述する、または含むエンティティ。
201:CREATEDを意味する。意味 *リクエストが実行され、新しいリソースが作成されました。新しく生成されたリソースは、Locationヘッダーフィールドで与えられたリソー スの最も具体的なURIを持つ、応答のエンティティで返されたURIによって参照する ことができる。応答は、ユーザーまたはユーザーエージェントが最も適切なものを選択できるような リソースの特性とロケーションのリストを含むエンティティを含むべきである [SHOULD]。エンティティの形式は、Content-Typeヘッダーフィールドで与えられたメディア タイプによって指定される。*
後者の方がHttp仕様に沿った内容になっているような気がしますが、何がどうなっているのか全く不明です。
レスポンスには リソースのリストを含む 特性および位置
を意味します。
推奨?解釈?
解決方法は?
レスポンスボディから、そのモノにリンクするページが与えられるというものです。
201 作成
は
201
(Created) ステータスコードは、リクエストが実行され、1つまたは複数の新しいリソースが作成されたことを示します。 リクエストによって作成されたプライマリリソースはLocation
ヘッダーフィールドがない場合、またはLocation
フィールドを受信した場合、有効なリクエスト URI で指定します。
これはつまり
Location
を返します。
ヘッダー
には、新しく作成された
物
:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
レスポンスボディ
そして、レスポンスに含めるべき内容についても言及しています。 本体 :
は
201
レスポンスペイロードは通常、作成されたリソースを記述し、リンクする。
ブラウザを使う人間には、新しく作成されたリソースにアクセスするために、彼らが見て、クリックできるものを提供するのです。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: text/html
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
もしページがロボットによってのみ利用されるのであれば、レスポンスがコンピュータによって読み取れるようにすることは理にかなっています。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586</resource>
<resource>http://stackoverflow.com/a/1962757/12597</resource>
</additional>
</createdResource>
あるいは、お好みで。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586",
"http://stackoverflow.com/a/36373586/12597"
]
}
応答はすべてあなた次第です。あなたが望むものを任意に選んでください。
キャッシュフレンドリー
最後に、作成したリソースを事前にキャッシュすることができるという最適化があります(コンテンツはすでに持っているので、アップロードしただけです)。サーバーは日付または
ETag
を、先ほどアップロードしたコンテンツと一緒に保存することができるんだ。
参照
7.2項
のようなバリデータヘッダーフィールドの意味と目的についての議論は、 こちらを参照してください。
ETag
と
Last-Modified
の中にある。
201
のレスポンスになります。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/23704283/12597
Content-Type: text/html
ETag: JF2CA53BOMQGU5LTOQQGC3RAMV4GC3LQNRSS4
Last-Modified: Sat, 02 Apr 2016 12:22:39 GMT
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
そして
ETag
は純粋に任意の値です。リソースが変更されたとき (そしてキャッシュが更新される必要があるとき) に、それらが異なるということが重要なのです。そのため
ETag
は通常ハッシュ(例:SHA2-256)です。しかし、それはデータベースであることもできます
rowversion
または、インクリメントされるリビジョン番号。以下のようなものはすべて
変化
を実行したとき
もの
を変更します。
関連
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み] 検索のためのRESTfulなURL設計
-
[解決済み] cURLを使ってCookieを送信するには?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み] restfulなPOSTレスポンスのための「ベスト」プラクティス
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] ログインページにリダイレクトする際の正しいHTTPステータスコードは何ですか?
-
[解決済み] RESTを使った複数レコードの削除
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] API のバージョン管理に関するベストプラクティス?[クローズド]
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み] オブジェクト内のアイテムの合計数を返すための最良のRESTfulメソッドは何ですか?
-
[解決済み] RESTのPUT/POST/DELETEコールは、規約によって何を返すべきですか?
-
[解決済み] RESTfulな方法でリソースのサーバーサイドメソッドを呼び出す
-
[解決済み] RESTとは?若干の混乱【終了
-
[解決済み] NetflixやTwitterのようなWebサービスにはRESTとSOAPのどちらを使うべきか?[クローズド]