HTTPロケーションヘッダーがPOSTリクエスト/ 201(作成)の応答にのみ設定されているのはなぜですか?
質問
3xxの回答を一瞬の間無視するのは、HTTPロケーションヘッダーがPOSTリクエスト/ 201(作成)の応答と組み合わせてのみ使用されているのは不思議です。
RFC 2616 SPEC :201(作成)応答の場合、その場所はリクエストによって作成された新しいリソースのものです。
これは広くサポートされている動作ですが、他のHTTPメソッドと一緒に使用すべきなのはなぜですか。 例としてのJSON API Spec の例として。
JSONペイロード内の現在のリソースへの自己参照リンクを定義します( RESTFUL API の珍しい。このリンクはすべてのペイロードに含まれています。投稿を介して新しいドキュメントを作成した場合、 を含める必要があると言うと、はHTTPロケーションヘッダーを含め、その値がペイロード内の自己参照リンクと同じである場合、これはのみです。 投稿に必要です。 HTTP Location Linkの場合は、カスタムフォーマットでhttp locationのヘッダーを使用できるのですか?
注:これはJSON APIに固有のものではありません。 Hal 、 JSON Hyper-Schema またはその他の規格。
注2:HTTP Linkヘッダと同じであるため、HTTPロケーションヘッダにも固有のものではありません。 JSON API、HALおよびJSON Hyper-Schemaが確認できるように、自己参照リンクの規則を定義するだけでなく、関連リソースに関する情報やリソースに対する可能なアクションに関する情報を表現します。しかし、それはすべてHTTPリンクヘッダーを使用するだけでよいようです。 (それらはHTTPロケーションヘッダーを使用したくない場合は、自己参照リンクをHTTPリンクヘッダーに入れることさえできます。)
私は暴走したくない、それはただある種の「車輪を再発明する」と思われる。それはまた非常に限定的であるように思われる:HTTPの場所/リンクヘッダーを使うだけでは、JSON、XML、またはHTTP Acceptヘッダーに何でも尋ねるかどうかは関係ありません。 JSON API、HAL、またはJSON Hyper-Schemaを使用する場合は、リンクを含まないヘッドリクエスト。
解決
Location
ヘッダーのセマンティクスは、自己参照リンクの意味ではなく、リクエストを完了するためにユーザーエージェントが続くべきです。それはリダイレクトで理にかなっています、そして、新しい場所にある新しいリソースを作成するときに行くべきです。リクエストがすでに完了している場合は、すでに必要なリソースの完全な表現があることを意味し、Location
を返すのは意味がありません。
Link
ヘッダーは、ハイパーテキストリンクと意味的に同等と見なすことができますが、メディアタイプがハイパーメディア認識ではない場合は、与えられたリソースに関連するメタデータを参照するために使用する必要があります。 RESTful APIの関連リソースへのリンク。
リソース表現におけるカスタムリンクフォーマットの必要性は、基礎となる実装とプロトコルからリソースを切り離す必要性に固有のものです。 RESTはHTTPに結合されていません。また、有効なURIスキームがあるプロトコルを使用できます。すべてのリンクにLink
ヘッダーを使用することにした場合は、HTTPに接続しています。
クライアントに従うようにFTPリンクを提示しましょう。その場合のLink
はどこにありますか?
他のヒント
位置ヘッダーの意味論はステータスコードによって異なります。 201の場合、それは新しく作成されたリソースにリンクしますが、3xx要求では複数の(シイサーなが)意味を持つことができます。それがそれが一般的にその他の用途のために避けられる理由だと思います。
代替方法は、常に一貫した意味を持つコンテンツロケーションヘッダーです。それはクライアントに要求されたリソースを正規のURLに伝えます。それは純粋に有益です(場所とは対照的に、クライアントによって処理されると予想される)。
それで、コンテンツロケーションヘッダは自己参照リンクに似たように見えるように見える。ただし、content-locationは定義されていないput and post の動作それはまた非常にめったに使われないようです。
このブログ場所vs content-location 素晴らしい比較です。これが見積もりです:
最後に、どちらのヘッダーも汎用リンクのためのものではありません。
合計で、体内の標準化されたセルフリンクが得意であるようです。それはクライアント側に多くの混乱を避けます。