Cache Control
GETメソッドを使用してGraphQLサーバーにクエリを実行する場合、標準的なHTTPキャッシュを利用することで、GraphQLレスポンスをクライアント側またはクライアントとサーバー間の中間ステージ(CDNなど)でキャッシュできます。
これはpersisted queriesに対して自然に機能し、単一エンドポイントやカスタムエンドポイントに対しては、エンドポイントに?query={ GraphQL query }というパラメーターを付加することで機能します。
説明
HTTPキャッシュは、レスポンスにmax-age値を含むCache-Controlヘッダーを送信することで機能し、レスポンスをどのくらいの期間キャッシュすべきかを示します。
Cache Control拡張機能はCache Control Listを提供しており、フィールドとディレクティブに対してカスタムのmax-age値を定義できます。そのため、異なるフィールドとディレクティブの組み合わせを含む異なるクエリは、それぞれ異なるmax-age値を生成します。
レスポンスのmax-age値はGraphQLエンジンによって自動的に計算されます。その値は、リクエストされたクエリ内のすべてのフィールドとディレクティブの中で最も低いmax-age(Cache Control Listで定義されたもの)となります。ただし、以下のいずれかに該当する場合はno-storeとなります:
- ミューテーションが実行された場合
- いずれかのフィールドまたはディレクティブの
max-ageが0の場合 - いずれかのフィールドまたはディレクティブに対してAccess Controlルールがユーザーの状態を確認する必要がある場合(この場合、レスポンスはユーザー固有のものとなるため、キャッシュできません)

Cache Control List
サイトに新しい「Cache Control List」カスタム投稿タイプが追加されます。メニューの「Cache Control Lists」ページからエントリを参照し、「Add New Cache Control List」をクリックしてエディターで新しいエントリを追加できます。


各Cache Control Listには1つまたは複数のエントリが含まれており、それぞれ以下の要素で構成されています:
- GraphQLクエリに含まれた場合に選択したmax-ageが有効になるフィールドとディレクティブ
- max-age

Cache Control Listを作成したら、対応するスキーマ設定を編集し、「Cache Control Lists」ブロックの下でリストからアイテムを選択することで、エンドポイントがそれを使用するように設定できます。
