私たちが16年間「偽装」してきたHTTPメソッド
バックエンド開発者は、検索エンドポイントに関して常に一つの問題に直面しています。
検索は読み取り操作であるため、GETを使用したいと考えます。しかし、検索フィルターが肥大化していくと、URLが2,000文字に達してしまいます。すると、プロキシがリクエストを切り捨ててしまい、検索が失敗するのです。
この制限を解決するためにPOSTに切り替えます。これで機能はしますが、それは一種の「嘘」です。POSTは、すべてのプロキシやキャッシュに対して「データを変更している」と伝えてしまいます。これにより、すべてのキャッシュが停止し、GETのスピードを失うことになります。
16年もの間、私たちは中間的な選択肢を持っていませんでした。
2026年6月、IETFはRFC 10008を公開しました。これにより、QUERYメソッドが導入されます。これは2010年以来、初めての新しいHTTPメソッドです。
QUERYは、GETとPOSTの長所を組み合わせています:
• 複雑なフィルターのためにリクエストボディを保持できます。 • セーフ(Safe)であり、サーバーの状態を変更しません。 • べき等(Idempotent)であり、同じ結果で2回実行できます。 • キャッシュ可能であり、CDNがレスポンスを保存できます。
QUERYリクエストは以下のようになります:
QUERY /products HTTP/1.1
Host: api.shop.example
Content-Type: application/json
{
"filter": { "category": "boots", "inStock": true },
"sort": "-price",
"limit": 20
}
新しいRFCでは、Accept-Queryヘッダーも追加されています。これにより、APIがどのクエリ形式をサポートしているかを伝えることができます。
開発者への警告:
QUERYリクエストのキャッシュは、GETリクエストとは異なります。GETのキャッシュはURLをキーとして使用しますが、QUERYのキャッシュはリクエストボディの一部をキーとして使用する必要があります。インフラがこれに対応していない場合、あるユーザーが別のユーザーのプライベートな検索結果を見てしまう可能性があります。
すぐに本番環境で使い始めないでください。エコシステムが追いつくには時間が必要です。
• ブラウザはまだ fetch() でのQUERYをサポートしていません。
• HTMLフォームはGETとPOSTのみをサポートしています。
• 多くのAPIゲートウェイやWAFは、未知のメソッドを拒否します。
QUERYを念頭に置いてAPIを設計しつつ、当面はPOSTエンドポイントを維持してください。
QUERYは、長年の妥協に終止符を打ちます。ネットワークに嘘をつくことなく、複雑な問いを投げかけることができるようになるのです。
あなたはエコシステムの普及を待っていますか?それとも、今すぐQUERYをテストしていますか?
Source: https://dev.to/arya_koste_5845807df94776/query-the-http-method-weve-been-faking-for-16-years-f9i
