HTTPキャッシュの追加
GraphQLサーバーに対して(より伝統的なPOSTメソッドの代わりに)GETを使用してクエリを実行すると、標準的なHTTPキャッシュを利用して、GraphQLレスポンスをクライアント側、またはクライアントとサーバー間の中間ステージ(CDNなど)でキャッシュすることができます。
これはパーシステッドクエリに対して自然に動作し、シングルエンドポイントおよびカスタムエンドポイントに対しては、エンドポイントにパラメーター?query={ GraphQL query }を追加することで動作させることができます。
設定はキャッシュコントロールリストを通じて作成され、スキーマ設定を介してエンドポイントに提供されます。
GETによるエンドポイントの実行
パーシステッドクエリは、GraphQLクエリをサーバーに保存しているため(つまり、リクエストのボディに提供する必要がないため)、すでにGETで実行するのに適しています。
一方、シングルエンドポイントおよびカスタムエンドポイントでは、エンドポイントURLに付加したパラメーター?query=...の下でクエリを提供する必要があります。
例えば、以下のGraphQLクエリは:
{
posts {
id
title
url
author {
id
name
url
}
}
}...シングルエンドポイントに対してGETでこのように実行できます:
https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }
max-ageの自動計算
レスポンスのmax-age値は、エンドポイントに割り当てられたアクセスコントロールリスト(スキーマ設定を介して)から自動的に計算されます。
この値は、リクエストされたクエリ内のすべてのフィールドおよびディレクティブの中で最も低いmax-age値、または以下のいずれかの場合はno-storeとなります:
- ミューテーションが実行される場合
- いずれかのフィールドまたはディレクティブの
max-age値が0の場合 - いずれかのフィールドまたはディレクティブに対してアクセスコントロールルールがユーザーの状態を確認する必要がある場合(この場合、レスポンスはユーザー固有のものとなり、キャッシュできません)
デフォルトのmax-age
特定のmax-ageが設定されていないフィールドは、スキーマ設定で定義されたデフォルト値を使用します:

設定されていない場合は、設定ページの「Cache Control」タブで定義されたデフォルトのmax-age値が使用されます。この値は86400秒で、設定で変更できます。
例
Userタイプのフィールドに対して以下のmax-age値の設定があるとします:
name=>600url=>30
この場合、このクエリへのレスポンスのmax-age値は86400に設定されます(displayNameもemailも設定されていないため、デフォルト値が使用されます):
query {
users {
displayName
email
}
}このクエリへのレスポンスのmax-age値は30に設定されます(設定されたすべてのフィールドの中で最も低い値であるurlに対応します):
query {
user(by: {id: 1}) {
name
url
}
}このクエリへのレスポンスのmax-age値はno-storeに設定されます(フィールドmeがユーザーの状態を必要とするため):
query {
me {
name
url
}
}このクエリへのレスポンスのmax-age値はno-storeに設定されます(ミューテーションを実行するため):
mutation {
createPost {
id
}
}すべてのキャッシュコントロールリストへのアクセス
プラグインのメニューで「Cache Control Lists」をクリックすると、作成されたすべてのキャッシュコントロールリストの一覧が表示されます:

新しいキャッシュコントロールリストの作成
「Add New Cache Control List」ボタンをクリックして、WordPressエディターを開きます:

キャッシュコントロールリストにタイトルを付け、フィールドとディレクティブを含むエントリを追加し、それらのmax-age値を設定します:

準備ができたら、Publishボタンをクリックします。これで、新しいキャッシュコントロールリストがスキーマ設定で利用可能になります。
キャッシュコントロールエントリ
すべてのキャッシュコントロールリストには、1つ以上のエントリが含まれており、それぞれに以下の要素があります:
- キャッシュを設定するフィールド
- キャッシュを設定するディレクティブ
- それらの
max-age値

インターフェースからのフィールドの選択
タイプのフィールドに加えて、インターフェースからフィールドを選択することもできます。この場合、max-age値は、そのインターフェースを実装するいずれかのタイプからそれらのフィールドをクエリした際に適用されます。

キャッシュコントロールリストの説明
ドキュメント設定パネルの「Excerpt」フィールドを使用して、キャッシュコントロールリストに説明を付けます。
詳細については、ガイド「APIへの説明の追加」を参照してください。
キャッシュコントロールリストの使用
キャッシュコントロールリストを作成した後、対応するスキーマ設定を編集し、「Cache Control Lists」ブロックの下のリストからACLを選択することで、カスタムエンドポイントまたはパーシステッドクエリがそれを使用できるようにすることができます。

設定をカスタマイズしない場合は、設定ページの「Cache Control」タブで定義されたデフォルトのキャッシュコントロールリストが使用されます:
