## What — `?` から後ろに付ける「見せ方の注文」
クエリパラメータは、URL の `?` より後ろに `key=value` の形で付ける**追加の指定**。パスが「どの資源か」を指すのに対し、クエリは同じ資源に対する絞り込み・並び替え・件数を注文する。
- `?` から注文が始まり、複数は `&` でつなぐ(`?state=closed&per_page=10`)
- 順序は自由。あっても無くても指している資源は同じ
| | パスパラメータ | クエリパラメータ |
| --- | --- | --- |
| 位置 | `?` より前(`/repos/golang/go`) | `?` より後(`state=closed`) |
| 役割 | どの資源か | その資源をどう見せるか |
| 省略 | できない | できる(既定値になる) |
**判定基準は「値を変えると別のモノを指すか」**。別のモノならパス、見え方が変わるだけならクエリ。どちらに入れるかは API 提供側が決めており、利用者に選択権はない。
## How — GitHub の Issue 一覧で読む
```
GET https://api.github.com/repos/golang/go/issues?state=closed&per_page=10
```
「golang/go の Issue 一覧(パス)を、クローズ済みだけ・10件ずつで(クエリ)」と読む。よく出るキーは4種類。
- 絞り込み:`state=closed`
- 並び替え:`sort=created`
- 件数・ページ:`per_page=30&page=2`([[ページネーション]]の正体)
- 検索語:`q=golang`
**使えるキーはエンドポイントごとにドキュメントの Parameters 欄が決めている**。自分で発明はできない。
## 落とし穴
- **キーを打ち間違えてもエラーにならない**。typo のキー(`stete=closed`)は黙って無視され、絞られていない全件が返る。「なぜか結果が多い」ときはキーの綴りを疑う
- **値に日本語・スペース・記号を入れるときは URL エンコードが要る**。`q=環境構築` は `q=%E7%92%B0...` に変換して送る。生の `&` や `=` が値に混ざると区切りと誤解される
## 関連
- [[API]] — API まわりの地図
- [[エンドポイント]] — `?` より前(メソッド+パス)の読み方
- [[ページネーション]] — クエリパラメータの代表的な実用例
- [[リンクの原理]] — URL 全体の分解はこちら