QUERYメソッド【QUERY method】QUERYリクエスト
概要

従来、データの取得にはGETメソッドが用いられてきたが、検索条件が多い場合や複雑な構造のデータを渡す場合、URLの長さ制限に抵触したり、URLエンコードが煩雑になったりする問題があった。加えて、検索条件がURLに含まれるため、通信経路上の機器のログなどに残りやすいという課題もあった。
こうした事情から、実際のWeb APIでは読み取り専用の処理であってもPOSTメソッドを流用する例が少なくなかった。POSTはリクエスト本文(ボディ部)に任意のデータを含められるが、本来はサーバにまとまったデータを送るための手段である。プロトコルの仕様上は安全性も冪等性(同じ操作なら毎回必ず同じ結果が得られる性質)も保証されず、その通信が実質的には問い合わせに過ぎないことを明示する手段がなかった。
QUERYメソッドはこの隙間を埋めるために設計された。GETと同様に安全性と冪等性を備えると定義される一方、POSTのようにリクエスト本文を持てる。送信内容によってサーバ側の状態が変更されないため、同じリクエストを繰り返しても副作用が生じない。この性質により、ネットワーク障害時の自動リトライやキャッシュによる応答の再利用が、GETと同様の条件のもとで行えるようになる。
QUERYメソッドの利用にあたっては、リクエスト本文の内容を解釈するためContent-Typeヘッダの指定が必須となる。またサーバは、受け付け可能な問い合わせ形式をAccept-Queryヘッダで示すことができる。検索条件にはJSONやXML、フォームデータなど用途に応じた形式を利用できるため、複雑な条件指定や多段階の絞り込みをURLに埋め込まずに表現できる。標準化されたばかりの仕様であり、既存のWebサーバやブラウザ、APIゲートウェイ、プロキシ、各種フレームワークでは対応状況に差があるため、当面はPOSTによる検索APIも引き続き使われるとみられる。