プロンプトとコンテキスト
2026年6月に発行されたRFC 10008は、HTTP QUERYメソッドを定義しています。これにより、クライアントは対象リソースに対する安全で冪等な操作を宣言しながら、リクエスト本文にクエリの記述を含めることができます。この面接では、プロトコルセマンティクスとインフラの実態とのギャップを評価します。既存のすべてのPOST検索エンドポイントを即座に移行することを求めているわけではありません。
面接官が評価するポイント
面接官が確認したいのは、QUERYが単なる「ボディ付きのGET」ではなく独立したメソッドであるという理解です。リクエストコンテンツとメディアタイプがクエリセマンティクスに関与し、キャッシュキーはそのコンテンツを考慮する必要があり、クロスオリジン呼び出しには原則としてプリフライトが必要です。優れた回答では、OPTIONSやAccept-Queryによるディスカバリ、未知のメソッドに対する405フォールバック、ゲートウェイログ、WAFの互換性についても言及されます。
回答前に明確にすべき質問
クエリは真に読み取り専用か?
対象リソースの状態を変更しないことを確認します。安全(safe)と冪等(idempotent)は対象リソースのセマンティクスを制約するものです。サーバーは結果を保持する追加のリソースを作成することは可能であるため、「副作用がない」ことはどこにも一切書き込みが発生しないという絶対的な保証ではありません。
サポート対象の環境・範囲は何か?
QUERYを受け入れなければならないブラウザのFetch、SDK、リバースプロキシ、CDN、WAF、サービスメッシュ、および内部クライアントをリストアップします。メソッドがアプリケーションサーバーで動作していても、途中で拒否されたり書き換えられたりする可能性があります。
キャッシュとプライバシーの要件は何か?
クエリコンテンツには機密性の高いフィルタが含まれる場合があります。どのレイヤーがURI、リクエストコンテンツ、キャッシュキーをログに記録するかを特定し、共有キャッシュ、マスキング/編集、またはPOSTパスの利用が適切かどうかを判断します。
30秒回答フレームワーク
「QUERYは、複雑なクエリコンテンツに対して明示的に安全、冪等、キャッシュ可能なメソッドが必要な場合に有用です。OPTIONS AllowまたはAccept-Queryレスポンスフィールドを通じてサポートを検出し、互換性マトリクスで実際のプロキシ、CDN、WAF、クライアントを検証します。キャッシュキーにはリクエストコンテンツと関連するメディアメタデータを含める必要があり、クロスオリジン呼び出しにはプリフライトが必要です。エコシステムの準備が整っていない場合は、RFCが存在するからといってインフラがアップグレードされたと思い込まず、短いクエリにはGETを維持し、互換性パスとしてPOSTを残します。」
ステップごとの詳細な回答
ステップ1: GET、QUERY、POSTの境界線を設定する
短く、ブックマークやコピーが可能なクエリにはGETを維持します。複雑なコンテンツを伴う読み取り専用操作に対してQUERYを評価します。操作によって状態が変化する場合、エコシステムでサポートが不足している場合、または既存のフォームやクライアントとの互換性が重要な場合はPOSTを維持します。セマンティクスとデプロイメントマトリクスの両方を考慮して選択します。
ステップ2: コンテンツタイプとサービスコントラクトを定義する
QUERYは、リクエストコンテンツと一致するContent-Typeを付与する必要があります。コントラクトには、クエリ形式、ページネーション、ソート、エラー、およびContent-LocationやLocationを介してGETで結果を取得できるかどうかを指定する必要があります。
ステップ3: 機能ディスカバリと安全なフォールバックを追加する
OPTIONS AllowまたはAccept-Queryを使用して、サポートされているメソッドとクエリメディアタイプを通知します。クライアントが405、415、またはゲートウェイの拒否を受け取った場合は、明示的なPOSTフォールバックポリシーに従います。やみくもな再試行はトラフィックを増幅させる可能性があります。
ステップ4: キャッシュとリトライの動作を設計する
QUERYは冪等であり、接続障害後に再試行できますが、キャッシュキーにはリクエストコンテンツと関連メタデータを含める必要があります。いかなる正規化もキャッシュとオリジンのセマンティクス間の一致を維持しなければならず、そうでなければあるクエリが別のクエリの結果を受け取ってしまう可能性があります。
ステップ5: クロスオリジンと運用を検証する
QUERYはCORSセーフリストに登録されたメソッドではないため、ブラウザはプリフライトをトリガーします。OPTIONS、Allow、ログ、メトリクス、WAFルール、レート制限、およびトレーシングがメソッドを認識していることを検証し、フォールバック率と失敗原因を記録します。
高品質な回答サンプル
RFC 10008が発行されたからといって、POSTを一括置換することはありません。小さく共有可能なフィルタにはGETを維持し、大きなクエリコンテンツを持ち、制御されたクライアントセットを備えた読み取り専用インターフェースに対してのみQUERYを試験導入します。サーバーは適切なContent-Typeを要求し、Accept-QueryまたはOPTIONSでサポートを通知します。キャッシュキーにはリクエストコンテンツとメディアタイプが含まれ、クロスオリジンクライアントはプリフライトをパスするようにします。リリース前に、ブラウザ、SDK、ゲートウェイ、CDN、WAF、サービスメッシュで実際のクエリを実行し、405、415、キャッシュの不一致、ログの切り捨てを監視します。サポートされていない重要なレイヤーがある場合は、移行の根拠が十分になるまでPOSTフォールバックを維持します。
よくある間違い
- 間違い: QUERYをボディ付きのGETとして扱う。 → 失敗の理由: メソッドのセマンティクス、キャッシング、ディスカバリのルールが異なります。 → 対策: コンテンツ、安全性、冪等性、キャッシュキーに関するRFCのルールを適用します。
- 間違い: アプリケーションサーバーのみをテストする。 → 失敗の理由: プロキシ、WAF、CDN、またはSDKが未知のメソッドを拒否する可能性があります。 → 対策: POSTフォールバックを備えた全経路の互換性マトリクスを実行します。
- 間違い: URIのみからキャッシュキーを構築する。 → 失敗の理由: 異なるコンテンツが誤って共有された結果を生成する可能性があります。 → 対策: リクエストコンテンツとメタデータを含め、正規化をテストします。
- 間違い: 冪等性を永久にリトライしてよい許可として扱う。 → 失敗の理由: 再試行は依然としてリソースを消費し、クエリ負荷を増幅させます。 → 対策: タイムアウト、バックオフ、レート制限、クエリ複雑度制限を組み合わせます。
フォローアップ質問と回答
フォローアップ1: なぜすべての複雑なクエリをQUERYに変換しないのですか?
メソッドのセマンティクスは条件の1つにすぎません。クライアント、プロキシ、CDN、WAF、モニタリングが一体となってそのメソッドをサポートしている必要があります。移行とフォールバックの複雑さがもたらす価値を上回る場合は、実績のあるPOSTのほうが安全です。
フォローアップ2: QUERYのレスポンスはキャッシュできますか?
はい、ただしキャッシュキーにリクエストコンテンツと関連メタデータを含める必要があり、キャッシュがメディアタイプを理解している必要があります。機密性の高い結果やリスクのある正規化の場合は、共有キャッシュを制限するか、GETを介して同等のリソースを公開します。
フォローアップ3: クロスオリジンのブラウザ呼び出しでは何が起こりますか?
QUERYはCORSセーフリストに含まれていないため、ブラウザはプリフライトリクエストを送信します。サーバーはOPTIONSに応答し、メソッド、リクエストされたヘッダー、およびオリジンを許可する必要があります。プリフライトの失敗は明示的なクライアントエラーとして処理されるべきです。
フォローアップ4: 未対応のゲートウェイが405を返した場合はどうしますか?
Allowを読み取り、バージョン管理されたクライアントポリシーからPOSTフォールバックを選択し、原因と発生率を記録します。未知のメソッドによるエラーをビジネスクエリの失敗として分類してはなりません。