キャッシュ
キャッシュCache Control

Cache Control

Included in the “Power Extensions” bundle

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-age0の場合
  • いずれかのフィールドまたはディレクティブに対してAccess Controlルールがユーザーの状態を確認する必要がある場合(この場合、レスポンスはユーザー固有のものとなるため、キャッシュできません)

キャッシュコントロールポリシーの定義

Cache Control List

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

Cache Control Lists
Cache Control Lists

Cache Control Listエディター

各Cache Control Listには1つまたは複数のエントリが含まれており、それぞれ以下の要素で構成されています:

  • GraphQLクエリに含まれた場合に選択したmax-ageが有効になるフィールドとディレクティブ
  • max-age

Cache Controlエントリ

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

スキーマ設定でのCache Control Listの選択