⭐️QUERYメソッドについて

QUERYとは、

  • GET のように リソースの状態を変更しない
  • POST のように ボディでリクエストを渡せる
  • レスポンスもキャッシュできる

なぜ必要なのか?

  • 複雑な検索条件をサーバーに渡したい、というケース
  • GET でやろうとすると、条件はすべてクエリ文字列に載せることになる
GET /blogs?query=入門&limit=2&tags=TypeScript,Bun&sort=id

これでも動作するが、以下の問題がある。

  • 条件がネストした構造(複雑な構造)になると表現しづらい
  • URLの長さ制限に引っかかることがある
  • 検索条件がURLに丸見えになる

かといって POST /blogs/search のようにしてしまうと、今度は 「これは検索なのに、意味的には状態変更(POST)に見える」 という気持ち悪さが残る&レスポンスをキャッシュすることもできない。

QUERY はこの 「ボディで複雑な条件を渡したいが、あくまで安全な読み取りである」 というギャップを埋めてくれるメソッド。