クエリパラメータとパスパラメータの使い分け

2026年7月29日に生成

RESTURL設計Web API

URL 設計でどちらを使うか迷ったとき、判断の軸は「そのパラメータがリソースを特定するものか、処理の条件を指定するものか」です。

パスパラメータとクエリパラメータの概要

パスパラメータは URL のパス部分に埋め込む値です。/users/4242 がその例で、「どのリソースか」を示します。省略すると別のエンドポイントを指してしまうため、必須の情報を置く形になります。

クエリパラメータは ? 以降に key=value 形式で続けます。/articles?sort=new&page=2 のように、同じリソース群への絞り込みや並び替えなど、条件を付加する用途に使います。省略しても URL 自体は成立します。

2つの違い

項目 パスパラメータ クエリパラメータ
URL 上の位置 パス部分(/users/42 クエリ文字列(?id=42
省略の可否 原則不可 省略可能
主な用途 リソースの一意な特定 絞り込み・ソート・ページング
複数値の扱い 困難 ?tag=a&tag=b で並べられる

使い分けの判断基準

「そのパラメータがなければリソースを特定できないか」で切り分けます。ユーザー ID や記事 ID など、値が変われば別のリソースを指すものはパスパラメータが自然です。一方、検索キーワードやソート順・フィルタ条件のように、なくても同じリソース集合にアクセスできるものはクエリパラメータに置きます1

# パスパラメータ: 特定の記事を取得
GET /articles/99
# クエリパラメータ: 記事一覧を絞り込む
GET /articles?author=alice&sort=created_at

具体的なシナリオ

EC サイトの商品ページを設計するとします。/products/sku-1234 はパスパラメータで特定の商品を指します。そのページに「カラー」「サイズ」の在庫フィルタを付けるなら /products/sku-1234?color=red&size=M とクエリパラメータで表現します。

もし商品 ID もクエリパラメータで /products?id=sku-1234 と書いた場合、/products というエンドポイントが「商品の一覧」なのか「単一商品の取得」なのか URL を見ただけでは分かりにくくなります。パスにリソース特定の情報を置くことで、エンドポイントの意味が明確になります。

パスパラメータで渡す値にスラッシュを含む場合、フレームワーク側のルーティングがパスを分割してしまうことがあります。その場合はエンコード(%2F)か、設計を見直すかを検討してください。

早見表

やりたいこと 使うもの
特定ユーザーの取得 パスパラメータ /users/42
ユーザー一覧をページング クエリパラメータ /users?page=3
特定の注文詳細 パスパラメータ /orders/abc-001
注文をステータスで絞り込む クエリパラメータ /orders?status=shipped
複数タグでフィルタ クエリパラメータ /posts?tag=api&tag=rest

次に気になるのが「同じ ID をパスとクエリの両方から受け取れる実装にしてよいか」という問題です。技術的には可能ですが、REST API として公開する場合は一方に統一しないと、クライアント実装やドキュメントが混乱します。エンドポイントごとにどちらかに決め切るのが無難です。

Footnotes

  1. Qiita の記事では「必須情報はパスパラメータ、任意情報はクエリパラメータ」と整理されており、複数の解説で共通する基準です。

参考ソース