URLクエリ文字列の構築と解析
キーバリューペアからURLクエリ文字列を構築する方法、特殊文字の処理、配列パラメータの操作、URLSearchParams APIを使用した堅牢なクエリ文字列管理を学びます。
Query Parameters
詳細な説明
URLクエリ文字列
クエリ文字列はURLのうちキーバリューデータを運ぶ部分で、?で始まり&で複数のパラメータを区切ります。
基本構文
https://search.example.com/results?q=javascript+tutorial&page=2&lang=en
\___________________/ \_____/ \_____/
| | |
パラメータ1 パラメータ2 パラメータ3
URLSearchParams API
JavaScriptでクエリ文字列を扱うモダンな方法:
// 構築
const params = new URLSearchParams();
params.append("q", "hello world");
params.append("page", "1");
params.append("tags", "js");
params.append("tags", "web");
console.log(params.toString());
// "q=hello+world&page=1&tags=js&tags=web"
// 解析
const search = new URLSearchParams("?q=test&page=2");
console.log(search.get("q")); // "test"
console.log(search.get("page")); // "2"
console.log(search.has("q")); // true
配列パラメータ
配列を渡す方法にはさまざまな慣例があります:
// 繰り返しキー(URLSearchParamsのデフォルト)
?tags=js&tags=css&tags=html
// ブラケット記法(PHP、Rails)
?tags[]=js&tags[]=css&tags[]=html
// カンマ区切り(一部のREST API)
?tags=js,css,html
エンコーディングルール
クエリ文字列の値は特殊文字に対してパーセントエンコードする必要があります:
| 文字 | エンコード | 備考 |
|---|---|---|
| スペース | + または %20 |
クエリ文字列では+が標準 |
& |
%26 |
セパレータとして扱われるため |
= |
%3D |
キーバリューデリミタとして扱われるため |
# |
%23 |
ハッシュフラグメントの開始として扱われるため |
% |
%25 |
エスケープ文字自体のエスケープ |
パラメータの順序
クエリパラメータの順序は通常サーバーにとって重要ではありませんが、一部のキャッシュシステムや署名アルゴリズム(AWS Signature V4など)ではカノニカルなパラメータ順序が必要です。パラメータをアルファベット順にソートすることは一般的な正規化手法です。
ユースケース
クエリ文字列の構築はフロントエンド開発の基本です。検索フォームはクエリパラメータとしてデータを送信し、ページネーションはpage/offsetパラメータに依存し、フィルターUIは複数のフィルター値をURLにシリアライズする必要があります。クエリ文字列構築の理解は、シングルページアプリケーションで共有可能でブックマーク可能なURLを構築するために不可欠です。