2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クエリパラメータを作る際の区切り方

2
Posted at

URLの「クエリパラメータ(GETパラメータ)」は、検索画面の絞り込みやページネーション、ソートなどで使われます。

単一の値を扱う場合は ?key=value& で繋ぐだけなのでシンプルですが、「複数の値(配列データ)」を扱う場合、Web全体で統一された唯一の標準ルール(RFCによる厳密な定義)は存在しません。

今回は、複数値を扱う一般的な4つの形式についてまとめました。

クエリパラメータの基本と役割

パラメータは ? から始まり、2つ目以降の条件は & で繋ぐのがWebの基本です。

/search?skill=react&workPlace=tokyo&sort=newest

クエリパラメータに適しているもの・適していないもの

設計の段階で、そもそもそのデータをURLに含めるべきかどうかの判断が必要です。

適しているもの(URLで共有・保持したい状態) 適していないもの(Bodyなどで送るべきデータ)
🔍 検索の絞り込み条件(フィルター) 📝 ユーザーが入力した長大なテキスト(ブログ本文など)
📄 ページネーション(page=2 など) 🔒 パスワードやクレジットカードなどの機密情報
📊 並び替え条件(sort=price_desc など) 🧬 複雑にネストされた巨大なJSONデータ

複数値(配列)を表す4つのアプローチとLaravelでの挙動

実務でよく使われる、複数値をURLで表現する4つの形式を比較します。

1. ブラケット形式(Brackets)

💡 Laravel環境で推奨

キー名の末尾に [] を付けて値を並べる形式です。

/search?skills[]=react&skills[]=laravel&skills[]=php
  • 特徴: PHPやRuby on Railsなどの文化圏で深く浸透している、事実上の標準(デファクトスタンダード)です。
  • Laravelでの挙動: バックエンド(内部のSymfony Request)が受け取った時点で、何の前処理も必要とせず自動的にPHPの array としてパースしてくれます。FormRequestでのバリデーションとも非常に相性が良いです。

2. 同名キーの繰り返し形式(Repeat parameters)

⚠️ PHP環境では注意

[] を付けず、同じキー名を何度も並べる形式です。

/search?skills=react&skills=laravel&skills=php
  • 特徴: Java(Spring Boot)、Go言語、またはブラウザ標準の URLSearchParams APIなどでは標準的な配列表現として扱われます。言語に依存しないシンプルなURLを保ちたい場合に採用されます。
  • Laravelでの挙動: PHPの標準仕様(parse_str 等の挙動)により、同名キーが連続すると「最後に書かれた値(上記なら php)」で上書きされてしまいます。Laravelでこれを取り出すには、未加工の生のクエリ文字列から独自のパースロジックを書く必要があり、保守性が下がりやすいため推奨されません。

3. カンマ区切り形式(Comma-separated)

1つのキーに対し、値をカンマ , で連結して1本の文字列にする形式です(CSV形式)。

/search?skills=react,laravel,php
  • 特徴: OpenAPI(Swagger)等でサポートされており、URLを短く美しく保ちたい場合に好まれます。
  • Laravelでの挙動: サーバー側が受け取った時点では、ただの "react,laravel,php" という「1本の文字列」です。そのため、バリデーションや処理に回す前に、手動で explode(',', $request->input('skills')) のように配列へ分解する前処理が必要になります。また、値自体にカンマが含まれる可能性がある場合はエスケープ処理の考慮が必要です。

4. 【非推奨】縦線(パイプ)区切り形式

値を縦線 | で連結する形式です。

/search?skills=react|laravel|php
  • | はURLの仕様上、多くのクライアントやライブラリで %7C にURLエンコードされるため、URLの可読性やデバッグ時の視認性が低下します。また、Laravel開発においてはコード中のバリデーションルールの区切り文字(required|string)と記号が同じであるため、開発者の混乱を招きやすく、可読性を下げる原因になります。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?