[解決済み] URLマトリックスパラメータとクエリパラメータの比較
質問
URLにマトリックスとクエリパラメータのどちらを使用するか悩んでいます。古い ディスカッション に、そのトピックは納得がいきません。
例
- クエリパラメータを含むURL。 http://some.where/thing?paramA=1¶mB=6542
- 行列のパラメータを含むURL。 http://some.where/thing;paramA=1;paramB=6542
一見すると、matrix paramsには利点しかないように見えます。
- より読みやすい
- XML文書内の"&"のエンコードおよびデコードが不要になります。
- URLに"?"を含むものは多くの場合キャッシュされず、行列パラメータを含むURLはキャッシュされる
- 行列パラメータはパスのどこにでも現れることができ、パスの末尾に限定されることはありません。
-
行列パラメータは複数の値を持つことができます。
paramA=val1,val2
しかし、デメリットもあります。
- のような一部のフレームワークのみです。 JAX-RS は行列パラメータをサポートしています。
- ブラウザがGETでフォームを送信すると、paramはquery paramsになる。つまり、同じタスクに対して2種類のパラメータが存在することになってしまうのです。RESTサービスのユーザーを混乱させないためにも、またサービスの開発者の労力を軽減するためにも、この分野では常にクエリパラメータを使用する方が簡単でしょう。
サービスの開発者はmatrix paramをサポートするフレームワークを選ぶことができるので、残る唯一の欠点は、ブラウザがデフォルトでクエリパラメータを作成することでしょう。
他にデメリットはありますか?あなたならどうしますか?
解決方法は?
重要な違いは、マトリクスパラメータは特定のパス要素に適用されるのに対し、クエリパラメータはリクエスト全体に適用されることです。 これは、複数のレベルのリソースやサブリソースに対して複雑なRESTスタイルのクエリを実行する際に、活きてくるものです。
http://example.com/res/categories;name=foo/objects;name=green/?page=1
結局のところ、名前空間(namespacing)の問題なんです。
注:ここでいうリソースの「レベル」は
categories
と
objects
.
もしクエリパラメータだけを使って複数階層の URL を作成した場合、次のようになります。
http://example.com/res?categories_name=foo&objects_name=green&page=1
この方法では、リクエスト内のパラメータの局所性によって追加される明確さも失われます。 さらに、JAX-RSのようなフレームワークを使用する場合、すべてのクエリパラメータは各リソースハンドラ内で表示され、潜在的な競合や混乱を招くでしょう。
クエリが1つのレベルしかない場合、その違いはあまり重要ではなく、2つのタイプのパラメータは事実上交換可能です。しかし、クエリパラメータの方が一般的にサポートが良く、より広く認識されています。 一般に、HTMLフォームやシンプルで単一レベルのHTTP APIなどでは、クエリパラメータにこだわることをお勧めします。
関連
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] jQueryで現在のURLを取得する?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
youtubeマッチチャンネル(チャンネル)
-
HTTPプロトコルの古典的な面接の質問と回答
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み] HTTPとRESTの違いは何ですか?
-
[解決済み] ベーシック認証における「レルム」とは
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?
-
[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?