「リクエスト」その2 ~どうしてURLはこんなに長い?~

株式会社WOWNエンジニアチームです。

前回はプログラムに対して任意の値を与えるために「リクエスト」という内容を話しました。リクエストボディというものをAPIに付け加えると、その内容をコントローラで利用できるのです。

今回は、リクエストにはもう1種類あることをお話させてください。

身近なリクエスト

長いURL

突然ですが、Googleのトップページ (https://www.google.com/)で好きなキーワードで検索をかけてみてください。
検索結果が現れたら、ブラウザのURL欄を見てみましょう。以下のような非常に長いURLになっているはずです。

どうしてこんなに長いURLになるのでしょうか?

 

クエリパラメータ

実はこのURLは2種類のパーツに分かれています。
純粋なページのURLは「https://www.google.com/search」の部分までで、ここから後ろ(?sca_esv=304891942d813308&…)の内容は「クエリパラメータ」と呼ばれるリクエスト内容を記述しています。
クエリパラメータは「{識別子}={値}」の組み合わせで記載し、「&」で区切って複数持たせることが可能です。上記のGoogle検索のクエリパラメータをよく見て整理すると、以下のような内容を見て取れます。

 

  1. sca_esv = 304891942d813308
  2. sca_upv = 1
  3. q = WOWN
  4. tbm = isch
  5. source = lnms
  6. prmd = ivsnmbtz
  7. sa = X
  8. ved = 2ahUKEwi1gL2m26KGAxW4sFYBHeNlDN0Q0pQJegQIFRAB
  9. biw = 1440
  10. bih = 754
  11. dpr = 2

Googleの検索システムはこのような情報をリクエストとして受け取って、これに基づいて検索結果を表示しているというわけです。

 

クエリパラメータの使い方

URL

クエリパラメータはビュー側でもコントローラ側でも扱うことができます。
WebページのURLにあるクエリパラメータは、ビューファイル側で取得することができます。

https://wown.co.jp?user_id=2024&user_name=wown

例えばページのURLがこのようになっている場合、以下のようにしてビューファイルの変数に収めることができます。

const queryParams = new URLSearchParams(window.location.search);
const queryUserId = queryParams.get('user_id');
const queryUserName = queryParams.get('user_name');

 

API

APIのURIにも含めることが可能です。

export default function CountButton() 
{ 
    return ( 
        <button onClick={() => post('/api/system/user/show?user_id={queryUserId}&user_name={queryUserName}'> 
            クリック 
        </button> 
    ); 
}

APIにクエリパラメータを含めると、コントローラではRequestオブジェクトからクエリパラメータの内容を含めることができます。上記のAPIなら、「$request->user_id」「$requst->user_name」でそれぞれクエリパラメータの内容にアクセスできます。

 

 

取り扱い注意

クエリパラメータをよく扱いやすいページとしては

  • 検索条件(キーワード、ソート順、フィルタリングなど)
  • ページ送りの番号
  • 商品や記事などのID

このあたりのデータを扱うことが多いでしょうか。

クエリパラメータは取り扱いやすいですが、リクエストボディと違ってパラメータの内容を簡単に見ることができ非常に簡単に改ざんすることが可能です。ですので、パスワードなどの秘密情報をクエリパラメータで扱うのは好ましくありません。

ですが、小さな情報を扱う際にたいへん扱いやすく便利ですし、ユーザーに情報が伝わることがメリットであることもあります。実際、今回の例に挙げたGoogleの検索結果ページはリクエスト内容をクエリパラメータで扱っていたことから同一の検索結果の共有ができていました。また、ブラウザバック(戻るボタン)などで過去の結果にアクセスする際にも問題が起こりにくいです。

     

    クエリパラメータはあちこちで利用されています。Webページを見る際、ちょっとだけURLに目を凝らして見てみると、その構造の一端が見えるかもしれません。

    WEB制作・ITに関するお悩みや
    ご質問等お気軽にご相談ください

    contact

    この記事の著者

    コメントする

    関連記事