Кэширование вызовов БЛ на клиенте

Чтобы использовать кэширование вызовов БЛ на клиенте, необходимо выполнить несколько простых шагов:

  1. Зарегистрировать механизм кэширования.
  2. Вызвать метод БЛ, используя SbisService.

Регистрация механизма кэширования

Для регистрации нужно вызвать функцию Browser/Cache:register. Кэширование не будет работать, если не будет вызвана эта функция.

Как вызвать метод БЛ, чтобы его результат закэшировался?

В методы call и query SbisService'а нужно задать параметр cache, в котором можно указать:

  • maxAge {number} - задает время в секундах, на которое кэшируется ответ БЛ.
  • mustRevalidate {number} - указывает, что нужно выполнить запрос, а кэш обновить вне зависимости от того, валидный он или нет. Если указано значение больше 0, то работает как throttling.
  • ignoredParams {string[]} - параметры метода БЛ, которые нужно исключить из ключа кэша.

Примеры

Простое кэширование

sbisService.call('method', params, {cache: {maxAge: 100})

Ответ будет закэширован на 100 секунд. При повторном аналогичном вызове:

  • если прошло менее 100 секунд - ответ будет из кэша, запроса на БЛ не будет.
  • если прошло более 100 секунд - кэш удаляется, выполняется запрос, ответ кэшируется.

Кэширование с указанием mustRevalidate > 0

sbisService.call('method', params, {cache: {maxAge: 100, mustRevalidate: 50})

Ответ будет закэширован на 100 секунд (мастер-запрос). При повторном аналогичном вызове (репитер):

  • если репитер пришел через более чем 100 секунд, кэш будет сброшен, выполнится запрос, и ответ закэшируется.
  • если репитер пришел через менее чем 100 секунд, но более чем 50 секунд, кэш сбросится, выполнится запрос, и ответ закэшируется.
  • если репитер пришел через менее чем 50 секунд, инвалидации кэша не произойдет. Ответ будет из кэша.

Кэширование с указанием mustRevalidate = 0

sbisService.call('method', params, {cache: {maxAge: 100, mustRevalidate: 0})

При каждом таком вызове кэш, даже если он ещё валиден, будет удалён, выполнится запрос на БЛ, ответ закэшируется на 100 секунд.

Кэширование с указанием ignoredParams

sbisService.call('method', params, {cache:  { maxAge: 100, mustRevalidate: 50, ignoredParams: ['badParamName']})

Ответ будет закэширован на 100 секунд. Ключем в базе станет 'method' + параметры вызова, исключая badParamName.

Сброс кэша

Сбросить кэш можно с помощью функции Browser/Cache:clearCache.

Обработка ошибок в методах БЛ

Ответы, содержащие ошибки, игнорируются и не попадают в кэш.

Обработка запросов

Подписка

Для подписки на обработку запроса необходимо использовать класс Browser/Cache:Listener.

В конструктор класса передается функция обработчик, в параметры которой придет объект с информацией об ответе:

  • source {cache|network} - откуда пришел ответ;
  • request {object} - объект с полями ;
    • method {string} - имя метода БЛ;
    • methodParams {object} - параметры метода.

Отписка

Чтобы отписаться, нужно вызвать у полученного экземпляра класса Browser/Cache:Listener метод destroy.