Как я могу использовать тот же кэш рендеринга, но для json?


Я работаю над REST API, и мне бы очень хотелось иметь возможность использовать для ответов тот же механизм, что и Drupal для кэшированного содержимого.

К сожалению, кэша рендеринга нет, все ответы в формате JSON. Таким образом, нет никаких настроек #ccache или политики кэширования страниц, которые необходимо применять из коробки.

Поэтому я задаюсь вопросом, возможно ли это вообще, и если да, то как мне к этому подойти?

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

 6
Author: 4k4, 2016-10-30

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, это уже должно быть реализовано.

 3
Author: 4k4, 2016-10-31 09:40:18