[解決済み] HATEOAS: 絶対URLか相対URLか?
質問
HATEOASを使ったRESTful Webサービスの設計において、リンクを完全なURLで表示することの長所と短所は何ですか(" http://server:port/application/customers/1234 とパス("/application/customers/1234")とでは、どちらがよいのでしょうか?)
どのように解決するのですか?
相対 URI と言われると、微妙に概念があいまいな気がします。
というのは RFC3986 の定義 によって、一般的なURIが含まれています。
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
厄介なのは、schemeとauthorityを省略した場合、"path"の部分自体は、絶対パス(先頭が
/
で始まる) か、または "ルートレス" 相対パスのいずれかであることです。例として
-
或いは
絶対URI
または完全なURI。
"http://example.com:8042/over/there?name=ferret"
-
そして、これは
相対 URI であり、絶対パス
:
/over/there
-
そして、これは
相対パスで、相対 URI
:
here
または./here
または../here
またはその他
つまり、もし質問が "サーバーが 相対パス を生成すべきかどうかという質問であれば、答えは "No"、そして の詳細な理由はこちらでご覧になれます。 . 私を含め、相対URIに反対している人の多くは、実は相対パスに反対しているのだと思います。
そして、実際には、ほとんどのサーバーサイドのMVCフレームワークでは、簡単に
相対 URI を絶対パスで
というように
/absolute/path/to/the/controller
のような絶対パスを持つ相対的なRIを使用する場合、サーバーの実装はそのような相対的なRIの前に
scheme://hostname:port
を絶対パスの前に付けるべきかどうかということです。OPの質問と同じですね。私はこれについてはよくわかりません。
一方では、私はまだ、サーバーが完全なURIを返すことが推奨されると考えています。しかし、サーバーは
をハードコードしてはいけません。
hostname:port
のようなソースコード内の
のように、ソースコード内で
一方、クライアント側で
http://example.com:8042
と絶対パスを連結するのは、それほど面倒ではなさそうです。結局のところ、クライアントはサーバにリクエストを送信するときに、そのスキームとドメイン名をすでに知っているのですね?
全体として、私はこう言うでしょう。 絶対URIを使うことを推奨し、場合によっては絶対パスで相対URIにフォールバックし、相対パスは決して使わない。 .
関連
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] RESTful WebServiceにファイルや関連データをJSONで投稿する。
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み】URIの単語の区切り文字にハイフン、アンダースコア、キャメルケースのどれを使うか?
-
[解決済み】動詞のないREST URLを作成する方法は?
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み】セッションは本当にRESTfulnessに違反するのか?
-
[解決済み] REST api: 1回のgetで複数のリソースを要求する [重複].
-
[解決済み] angularjsのページでRESTful APIからサービスにアクセスするにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み] RESTとは?若干の混乱【終了
-
[解決済み] NetflixやTwitterのようなWebサービスにはRESTとSOAPのどちらを使うべきか?[クローズド]
-
[解決済み] RESTfulなパスワードリセット
-
[解決済み] バージョン管理されたAPIのコードベースはどのように管理されていますか?
-
[解決済み] REST API DESIGN - 異なるパラメータを持つが同じURLパターンでRESTを通してリソースを取得する。
-
[解決済み] RESTful - DELETE レスポンスボディに含まれるべき内容
-
[解決済み] GRPCとRESTはどう違うのですか?
-
[解決済み] RESTアプリケーションで現在ログインしているユーザーのURIを設計する
-
[解決済み] 非推奨APIをクライアントに通知するためのHTTPレスポンスヘッダに関する規約