世界を動かす技術を、日本語で。

新しいHTTP QUERYメソッドの解説

2026年6月23日原文(kreya.app)

概要

  • RFC 10008 で新たに定義された HTTP QUERYメソッド の登場背景
  • 従来の GET/POST の課題とQUERY導入の意義
  • QUERYの 技術的特徴 と使い方の注意点
  • 現状の対応状況 や今後の普及見通し
  • QUERY導入時の 実装上のポイント と結論

RESTful APIのHTTPメソッドとQUERY登場の背景

  • RESTful APIでは、 GET でデータ取得、 POST でリソース作成、 PUT で更新など、 HTTPメソッド が操作意図を示す役割
  • HTTPメソッドは単なる 文字列 だが、GETやPOSTには RFCや実装依存の振る舞い が多数存在
    • 例:ブラウザはアドレス入力やブックマークでGETを自動送信
    • 標準HTTPフォームではGET/POSTのみ利用可能
    • 多くのプロキシ・ファイアウォール・Webサーバーは標準メソッドのみ許可
  • 既存メソッドで十分と思われていたが、 複雑な検索クエリ で限界が顕在化

GETによるクエリの課題

  • 単純なフィルタ はGETのクエリパラメータで対応可能
    • 例:/api/v1/users?role=admin&status=active&sort=desc
  • 複雑なリレーション・ネスト・高度なロジックでは URLが長大化・可読性低下・文字数制限超過 のリスク
    • 非ASCIIや特殊文字のエンコードでリクエストサイズ増大
    • サーバーやミドルウェアでの リクエストパラメータのログ記録 が問題になる場合も
    • 配列や深いネストの表現が 実装依存・仕様が曖昧
  • GETで リクエストボディ送信 は理論上可能だが、HTTP RFCでは非推奨
    • 実際には多くのクライアント・プロキシ・WebサーバーがGETボディを 無視・拒否・独自解釈
    • そのため、GETボディ利用は 非推奨 で運用上の問題が多発

POSTによるクエリのワークアラウンドと課題

  • GETでボディが使えないため、 POSTでリクエストボディ を送信する方法が一般的
  • しかし、POSTは 非冪等・リソース作成/処理用 の意味合い
    • 冪等性が担保できず、 自動リトライ時の副作用 リスク
    • ミドルウェアやプロキシが GETのみ自動キャッシュ する仕様のため、POSTではキャッシュ不可
    • 読み取り専用操作 であることを自動判別できず、設計上の違和感

QUERYメソッドの登場と特徴

  • こうした課題を受けて、 QUERYメソッド がRFC 10008で正式に定義
  • QUERYは GETに似ているが、リクエストボディ送信が可能
    • 安全かつ冪等 であることが前提
    • キャッシュ可能 (ただし、キャッシュキーにリクエストボディを含める必要)
  • 複雑な検索クエリ に最適なHTTPメソッドとして位置付け

QUERY利用時の注意点・課題

  • QUERYを すぐに全面採用 するのは時期尚早
    • 現時点での 対応クライアント・プロキシ・Webサーバーは限定的
      • 例:Kreyaは1.20でQUERY対応済みだが、他は未対応多数
    • GETのURLパラメータによるクエリは 引き続き有効
  • リンク共有やブックマーク が必要な場合はGET推奨
    • QUERYはリクエストボディ利用のため、URL共有不可
  • QUERYの キャッシュ実装は難易度が高い
    • リクエストボディをキャッシュキーに含める必要があるため

結論

  • HTTP QUERYは、読み取り専用の複雑なリクエストにおいてPOSTの置き換えとなる新メソッド
  • 普及までに時間を要するが、 GETで対応困難な場合の選択肢 として検討価値あり
  • 利用時は 互換性・キャッシュ・共有性 に十分注意し、 十分なテスト を推奨

Hackerたちの意見

過去にここでHTTP QUERYについて何度も話題になってたよね: https://news.ycombinator.com/item?id=48568502 (4日前、173件のコメント) https://news.ycombinator.com/item?id=29794838 (4年前、125件のコメント)

でも、著者は彼のPostmanの代替品を推奨したいみたいだね。

HTTPメソッドに新しいものが加わるのは面白いね。今までのやつが固定されてる感じがするから。少なくとも、僕が開発者になってからはそう思う。HTTP QUERYの採用やサポートがどれくらい早く進むのか気になるな。HTTP QUERYみたいなものがあればいいなと思う場面は結構あったから。

これ、10分くらいで実装できるよ。マジで冗談じゃない。

ゼロだね。多くのライブラリはリクエストメソッドを文字列として要求するから、今すぐコーディングを始められるよ。> 僕がHTTP QUERYみたいなものがあればいいなと思う場面は結構あったから。POSTを使う方がデメリットはないよ。

だから別のメソッドがあるんだよね。「QUERYメソッドのサポート」を伝える方が、「ボディなしで受け入れられるけど、ちょっと違う意味で受け入れられるやつ」っていうよりも簡単だし。

リクエストボディを使ったHTTP GETは悪いアイデアだよ。例えば、企業のファイアウォールの背後にいるユーザーや別のブラウザでは、あなたのウェブサイトを使えなくなるかもしれないからね。QUERYリクエストも、しばらくの間は同じことになるよ。

そうだね、QUERYはただのGETにボディを追加しただけに見える。プロトコルや挙動に違いはないよ。

405 Method Not AllowedはPOSTにフォールバックするのは簡単だよ。GETリクエストが間違った動作をしたってどうやってわかるの?

インフラがちゃんと管理されてないからって、プロトコルの進化を否定する理由にはならないよね。それよりも、インフラをもっとちゃんと管理する理由になる。実際、そんなに難しくないし。

GETボディを標準化することのデメリットは何だったんだろう。CoAPにはすでにあるし(これがCoAPとHTTPのプロキシを作るときに摩擦を生む)。全体的に「RESTful」インターフェースを設計する際にHTTPメソッドに焦点を当てすぎるのが嫌だな。結局、僕たちが作ってるのは実質的にRPCなんだから、キャッシュ可能性のメタ情報が最初に指定されるべきことなのか疑問だよ。

中間ボックスが絶対に解決されないまま放置されてる。業界としては、ハードブレイクを作って、プレイヤーにアップグレードさせて、そのアップグレードのために議論できる機能を提供する方がいいよね。

Hacker Newsで議論の続きを見る