APIの作成
APIの作成HTTPキャッシュの追加

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が設定されていないフィールドは、スキーマ設定で定義されたデフォルト値を使用します:

スキーマ設定でのデフォルトmax-age値

設定されていない場合は、設定ページの「Cache Control」タブで定義されたデフォルトのmax-age値が使用されます。この値は86400秒で、設定で変更できます。

Userタイプのフィールドに対して以下のmax-age値の設定があるとします:

  • name => 600
  • url => 30

この場合、このクエリへのレスポンスのmax-age値は86400に設定されます(displayNameemailも設定されていないため、デフォルト値が使用されます):

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」タブで定義されたデフォルトのキャッシュコントロールリストが使用されます:

設定ページでのデフォルトキャッシュコントロールリストの選択