URLのパスパラメータとクエリパラメータのそれぞれの特徴や使用場面についてまとめました。
※ 本記事はリクエスト設計に関する内容であり、フロントエンドでのタブ切り替えやモーダル開閉といったUI制御の話ではありません。
✅ パスパラメータとは
URLの一部にパラメータを含める方式のことです。
下の例では{id}に動的な値が入り、特定のユーザーを表します。
https://example.com/users/{id}
パスパラメータはリソースを一意に特定するために使われます。
つまり、パスパラメータでリクエストしたら、取得するデータや表示するページが1つに決まるということです。
リクエスト時に「どのページを表示するのか」「どのデータを返すのか」をURLから判断できるようにするのが、好ましい設計とされています。
リソースとは?
リクエストで返すページやデータのことを指します。
- Webサイトだとページやファイル
- apiだとデータ
✅ クエリパラメータとは
URLの末尾に?を付けて、キーと値のペアで指定する方式のことです。
複数指定する場合は&で連結します。
https://example.com?key1=value1&key2=value2
クエリパラメータは、リソースを絞り込んだり、並び順や選択状態など一時的な状態を指定するために使われます。
指定がなくてもデフォルトの結果を取得できることが一般的です。
同じページやAPIに対して、条件を追加しているというイメージで捉えると分かりやすいです。
✅ パスパラメータとクエリパラメータの使い分け基準
極論を言えば、どちらを選んでもサーバー側の実装次第で同じ情報を受け取ることはできますが、一般的には、
- 必須情報(リソースを一意に特定するために必要なもの):パスパラメータ
-
任意情報(なくてもリクエストが成り立つもの):クエリパラメータ
とするのが好ましいと言われています。
✅ 設計時にあわせて意識しておきたいポイント
実際にURL設計を行う際には、可読性や運用のしやすさも考慮しておくと、より実用的です。
💡URLの可読性・見通し
URLを見てどのリソースを示しているのか直感的にわかるものが望ましいです。
悪い例:
https://example.com/products/123/size/large/sort/price/limit/20
- URLが長い
- どこまでがリソースを指しているのかわかりづらい
良い例:
https://example.com/products/123?size=large&sort=price&limit=20
- リソースは
商品123だと分かりやすい - 条件部分がクエリパラメータとしてまとまっており、URLの見通しが良い
💡実装面
拡張性を意識して、将来的な仕様変更や条件追加にも柔軟に対応できる構造にしておくと良いです。
例えば、最初は日付を指定してデータを取得する設計だったとしても、
後々「月単位」「年単位」など別の粒度でデータを扱いたくなることもあります。
そうなった場合に無理なく拡張できるかどうかを意識すると、後の対応もスムーズです。
💡URLごとの扱われ方の違い
検索エンジンやアクセス解析ツールでは
以下のようにURLが違うものは、別ページとして認識されることがあります。
- https://example.com/products/123
- https://example.com/products/123?sort=asc
- https://example.com/products/123/sort/asc
このような扱いは、HTMLタグやツール側の設定で制御できることも多いため、
どのように管理・分析したいかを意識して設計しておくと安心です。
まとめ
- 必須情報(リソースを一意に特定するもの)はパスパラメータ
- 任意の条件や絞り込みはクエリパラメータ
- 将来の拡張性を考慮して設計すると良い
- SEOやアクセス解析の観点から、別URL=別ページとして扱われる
参考
パスパラメータとクエリパラメータの違いと使い分け
【URL】クエリパラメータとパスパラメータの違い
REST API設計時に気を付ける主なポイント
SEO上urlパラメータは重複コンテンツに注意
さいごに...
本記事では一般的な考え方として学んだものをまとめましたが、URL設計にはいろいろな考え方があると思います。
「ここは違うのでは?」「こういう場合もあるよ!」といったご意見があれば、ぜひ教えてください!