Добавление HTTP-кэширования
Когда queries выполняются к серверу GraphQL с использованием GET (вместо более традиционного метода POST), ответ GraphQL может кэшироваться на стороне клиента или на промежуточных этапах между клиентом и сервером (например, через CDN) с помощью стандартного HTTP-кэширования.
Это работает естественным образом для персистентных queries, а для единственного эндпоинта и пользовательских эндпоинтов может работать путём добавления параметра ?query={ GraphQL query } к эндпоинту.
Конфигурация создаётся через список управления кэшем и передаётся эндпоинту через конфигурацию схемы.
Выполнение эндпоинта через GET
Персистентные queries уже подходят для выполнения через GET, поскольку они хранят GraphQL query на сервере (то есть её не нужно передавать в теле запроса).
Однако для единственного эндпоинта и пользовательских эндпоинтов query должна быть передана через параметр ?query=..., добавленный к URL эндпоинта.
Например, следующая GraphQL query:
{
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 из всех полей и директив в запрошенной query, или no-store, если:
- выполняется какая-либо мутация
- какое-либо поле или директива имеет
max-ageсо значением0 - правило управления доступом должно проверять состояние пользователя для какого-либо поля или директивы (в этом случае ответ специфичен для пользователя и не может кэшироваться)
Max-age по умолчанию
Поля, для которых не задано конкретное значение max-age, будут использовать значение по умолчанию, определённое в конфигурации схемы:

Если значение не задано, будет использоваться значение max-age по умолчанию, определённое на странице настроек во вкладке «Cache Control». Это значение составляет 86400 секунд и может быть изменено в настройках.
Пример
Предположим, что у нас задана следующая конфигурация значений max-age для полей типа User:
name=>600url=>30
Тогда ответ на эту query будет иметь значение max-age, равное 86400 (потому что ни displayName, ни email не настроены, поэтому используется значение по умолчанию):
query {
users {
displayName
email
}
}Ответ на эту query будет иметь значение max-age, равное 30 (соответствующее url — наименьшему значению из всех настроенных полей):
query {
user(by: {id: 1}) {
name
url
}
}Ответ на эту query будет иметь значение max-age, равное no-store (потому что поле me требует состояния пользователя):
query {
me {
name
url
}
}Ответ на эту query будет иметь значение max-age, равное no-store (потому что выполняется мутация):
mutation {
createPost {
id
}
}Просмотр всех списков управления кэшем
При нажатии на «Cache Control Lists» в меню плагина отображается список всех созданных списков управления кэшем:

Создание нового списка управления кэшем
Нажмите на кнопку «Add New Cache Control List», чтобы открыть редактор WordPress:

Дайте списку управления кэшем название, добавьте записи с полями и директивами и настройте для них значение max-age:

Когда всё готово, нажмите кнопку Publish. После этого новый список управления кэшем становится доступным для конфигурации схемы.
Записи Cache Control
Каждый список управления кэшем содержит одну или несколько записей, каждая из которых включает следующие элементы:
- Поля, для которых настраивается кэширование
- Директивы, для которых настраивается кэширование
- Значение
max-ageдля них

Выбор полей из интерфейсов
Помимо полей из типов, можно также выбирать поля из интерфейсов. В этом случае значение max-age применяется при запросе этих полей из любого типа, реализующего данный интерфейс.

Описание списка управления кэшем
Используйте поле «Excerpt» в панели настроек документа, чтобы добавить описание к списку управления кэшем.
Дополнительную информацию можно найти в руководстве Добавление описания к API.
Использование списка управления кэшем
После создания списка управления кэшем его можно применить к пользовательскому эндпоинту или персистентной query, отредактировав соответствующую конфигурацию схемы и выбрав ACL из списка в блоке «Cache Control Lists».

Если конфигурация не настроена, будут использоваться списки управления кэшем по умолчанию, определённые на странице настроек во вкладке «Cache Control»:
