私たちが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