Кэширование ответов REST API с разными параметрами в WordPress

WordPress REST API позволяет создавать мощные и гибкие приложения, взаимодействующие с сайтом через API-запросы. Однако при большом количестве пользователей и запросов к REST API возникает проблема высокой нагрузки на сервер, особенно если ответы динамические и зависят от параметров запроса. В этой статье разберём, как эффективно настроить кэширование ответов REST API с разными параметрами, используя возможности WP Super Cache и собственные решения.

Почему важно кэшировать REST API с учётом параметров

По умолчанию WP Super Cache и другие плагина кэшируют страницы по URL, однако REST API часто работает с параметрами в URL, например /wp-json/wp/v2/posts?per_page=5&page=2. Если кэшировать только по базовому URL без учёта параметров, можно получить некорректный ответ или вовсе не использовать кэш для разных вариантов запроса.

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

Это особенно актуально для сайтов, использующих REST API для вывода списков постов, фильтрации, пагинации, а также для кастомных эндпоинтов.

Как WP Super Cache обрабатывает REST API запросы

По умолчанию WP Super Cache не кэширует REST API ответы, потому что они обычно генерируются динамически и должны быть свежими. Однако при правильной настройке и с учётом параметров можно включить кэширование, что значительно снизит нагрузку.

Для этого нужно:

  • Отключить исключения для REST API в настройках WP Super Cache.
  • Реализовать генерацию уникального ключа кэша с учётом всех GET-параметров.
  • Убедиться, что кэш очищается при обновлении данных, влияющих на REST API.

Пример настройки фильтра для кэширования REST API

Добавим в functions.php или в свой плагин следующий код, чтобы WP Super Cache учитывал параметры запроса при кэшировании:

add_filter('wpsupercache_cache_key', 'wpsupercache_custom_cache_key', 10, 2);
function wpsupercache_custom_cache_key($key, $url) {
    if (strpos($url, '/wp-json/') !== false) {
        // Учитываем все GET-параметры для REST API
        $query = $_SERVER['QUERY_STRING'] ?? '';
        $key .= '_' . md5($query);
    }
    return $key;
}

Этот фильтр дополняет ключ кэша хешем строки параметров, что гарантирует разные кэши для разных запросов.

Кэширование кастомных REST API эндпоинтов с разными параметрами

Если вы создаёте собственные REST API маршруты, важно самостоятельно реализовать механизм кэширования, учитывающий параметры запроса. Рассмотрим пример создания кастомного эндпоинта с кэшированием.

Регистрация эндпоинта и кэширование ответа

add_action('rest_api_init', function() {
    register_rest_route('wpsupercache/v1', '/data', array(
        'methods' => 'GET',
        'callback' => 'wpsupercache_get_data',
        'args' => array(
            'param' => array(
                'required' => false,
                'validate_callback' => 'is_string',
            ),
        ),
    ));
});

function wpsupercache_get_data($request) {
    $param = $request->get_param('param') ?: 'default';
    $cache_key = 'wpsupercache_data_' . md5($param);

    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return rest_ensure_response(json_decode($cached));
    }

    // Имитация тяжёлой операции
    $data = array('result' => 'Данные для параметра ' . $param, 'time' => current_time('mysql'));

    set_transient($cache_key, wp_json_encode($data), HOUR_IN_SECONDS);

    return rest_ensure_response($data);
}

В этом коде:

  • Создаётся эндпоинт /wp-json/wpsupercache/v1/data?param=значение.
  • Кэшируется результат с учётом параметра param через set_transient.
  • Кэш живёт час и обновляется автоматически.

Как очистить кэш при обновлении данных

Важно, чтобы при изменении контента, на который влияют REST API запросы, кэш очищался. Для стандартных постов можно использовать хуки save_post и delete_post:

add_action('save_post', 'wpsupercache_clear_custom_cache');
add_action('delete_post', 'wpsupercache_clear_custom_cache');

function wpsupercache_clear_custom_cache($post_id) {
    // Очистка всех кэшей с префиксом
    global $wpdb;
    $transients = $wpdb->get_col("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_wpsupercache_data_%'");
    foreach ($transients as $transient) {
        $key = str_replace('_transient_', '', $transient);
        delete_transient($key);
    }
}

Это гарантирует, что после изменения постов кэш REST API обновится при следующем запросе.

Полезные плагины для расширенного кэширования REST API

Кроме WP Super Cache, существуют плагины, которые помогают в кэшировании REST API с учётом параметров:

  • REST Cache — кэширует REST API ответы с разными параметрами, легко настраивается.
  • Clearfy Pro — содержит оптимизации, включая продвинутые методы кэширования и очистки.

Советы по производительности и безопасности

При кэшировании REST API важно не только улучшить производительность, но и обеспечить корректность данных. Вот несколько рекомендаций:

  • Не кэшируйте приватные или чувствительные данные без проверки прав пользователя.
  • Используйте уникальные ключи кэша с учётом всех параметров и контекста (например, пользователь, локаль).
  • Регулярно очищайте кэш при изменениях данных.
  • Тестируйте кэширование на разных типах запросов, чтобы избежать ошибок.

Таким образом, грамотное кэширование REST API запросов с учётом параметров помогает значительно снизить нагрузку на сервер и ускорить работу сайта без потери актуальности данных.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Кэширование форм с обработкой данных в WordPress: практическое руководство
20.02.2026
Кэширование динамического контента с разными параметрами в WordPress
09.02.2026
Кэширование WooCommerce: как правильно кэшировать корзину и личный кабинет
20.04.2026
Кэширование страниц с разными cookie в WordPress: практическое руководство
11.03.2026
Кэширование подключенных ресурсов в WordPress: как ускорить загрузку CSS и JS
20.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее