API:Кэширование данных

From mediawiki.org
This page is a translated version of the page API:Caching data and the translation is 100% complete.

Управление кэшированием со стороны клиента

Протокол 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.