API:Кэширование данных
Эта страница является частью документации по API действий MediaWiki. |
Управление кэшированием со стороны клиента
Протокол HTTP позволяет управлять тем, как браузеры и веб-прокси кэшируют данные, путём установки особых значений в заголовок Cache-Control
.
(Это работает только для GET-запросов.)
API позволяет клиенту задать два из этих параметров, max-age
и s-maxage
, через параметры API maxage
и smaxage
.
maxage
указывает браузеру, как долго следует кэшировать ответ (в секундах).
smaxage
делает то же самое для общих прокси. На практике последнее обычно используется для отдачи инструкций обратному прокси на стороне сервера (такому, как Varnish фонда Викимедиа).
Ошибки никогда не кэшируются. Зависящие от пользователя ответы будут помечены, как Cache-Control: private
, так что браузеры будут кэшировать их, а общедоступные прокси — нет.
На данный момент API использует по умолчанию язык вошедшего в учётную запись пользователя, так что ответы таким пользователям всегда непубличны.
Этого можно избежать, добавив параметр API uselang=content
(T97096).
Улучшение отношения попаданий в кэш
Запрос выдаётся из кэша, только если именно этот URL был кэширован.
(Например, если вы отправляете тот же самый запрос с maxage=1800
, а затем с maxage=3600
, второй запрос не сможет использовать кэшированный результат первого, поскольку различные значения параметра maxage
делают URL различными.)
Если вы передаёте в качестве параметра список страниц, вы можете улучшить отношение попаданий в кэш, отсортировав список и удалив дубликаты.
Управление кэшированием из модуля API
Кэширование определяется методами ApiMain::setCache*
.
Обычно кэширование будет проблемой только в подмодулях query , в которых вместо вышеописанного следует использовать метод getCacheMode
, который они наследуют от ApiQueryBase
.