Как я могу использовать тот же кэш рендеринга, но для json?
Я работаю над REST API, и мне бы очень хотелось иметь возможность использовать для ответов тот же механизм, что и Drupal для кэшированного содержимого.
К сожалению, кэша рендеринга нет, все ответы в формате JSON. Таким образом, нет никаких настроек #ccache или политики кэширования страниц, которые необходимо применять из коробки.
Поэтому я задаюсь вопросом, возможно ли это вообще, и если да, то как мне к этому подойти?
В основном мне нужно кэшировать ответы в одном и том же образом, например, как сущности. Поэтому, если контекст является конкретным пользователем, и я отображаю информацию о сущности, я хотел бы получить свежую информацию, если сущность изменена, но тот же контент, если нет, и пользователь тот же... и так далее.
1 answers
Вы должны использовать кэшируемый ответ, а затем вы можете добавить кэшируемые метаданные из массива визуализации или непосредственно из объекта:
use Drupal\Core\Cache\CacheableJsonResponse;
use Drupal\Core\Cache\CacheableMetadata;
$response = new CacheableJsonResponse($json, 200);
$response->addCacheableDependency(CacheableMetadata::createFromRenderArray($content));
$response->addCacheableDependency($entity);
Если вы используете основной REST API, это уже должно быть реализовано.