REST API — мощный инструмент в WordPress, который позволяет получать данные сайта в формате JSON для различных приложений и фронтенд-решений. Однако если не оптимизировать его работу, это может привести к излишней нагрузке на сервер и замедлению работы сайта. В этой статье подробно разберём, как оптимизировать ответы REST API в WordPress с помощью фильтров, удаления лишних данных и кеширования.
Почему стоит оптимизировать REST API в WordPress
WordPress REST API генерирует данные по умолчанию с большим количеством полей, которые часто не нужны в конкретных запросах. Это увеличивает объём передаваемых данных, время обработки и нагрузку на сервер. Особенно это критично для сайтов с высокой посещаемостью и сложными фронтенд-приложениями на React, Vue или других JS-фреймворках.
Оптимизация ответов REST API позволяет:
- Уменьшить объём передаваемых данных и время загрузки;
- Снизить нагрузку на сервер;
- Ускорить работу фронтенда за счёт меньшего размера ответов;
- Обеспечить безопасность, исключая передачу чувствительных или ненужных данных.
Удаление лишних полей из ответов REST API WordPress
Часто в ответах REST API возвращается множество мета-данных, ссылок и полей, которые не используются на стороне клиента. Их удаление значительно ускоряет обработку и передачу данных.
Для этого можно использовать фильтр rest_prepare_post для постов или аналогичные для других типов данных. Рассмотрим пример, как удалить лишние поля из ответа для постов:
function wpspeed_filter_rest_response(\WP_REST_Response $response, \WP_Post $post, \WP_REST_Request $request) {
$data = $response->get_data();
// Удаляем поля, которые не нужны
unset($data['guid']);
unset($data['meta']);
unset($data['links']);
$response->set_data($data);
return $response;
}
add_filter('rest_prepare_post', 'wpspeed_filter_rest_response', 10, 3);В этом примере мы удаляем поле guid, все метаданные и ссылки. Это уменьшит размер ответа.
Оптимизация для кастомных типов записей
Если на сайте используются кастомные типы записей, нужно аналогично фильтровать их ответы. Например, для типа product:
add_filter('rest_prepare_product', 'wpspeed_filter_rest_response', 10, 3);Таким образом можно централизованно контролировать, что возвращает API, подгоняя под задачи фронтенда.
Добавление своих полей с минимальным весом
Иногда необходимо добавить в REST API свои данные. Лучше всего делать это через регистрируемые поля, чтобы не перегружать ответ и избежать повторной нагрузки на сервер.
Пример добавления поля wpspeed_custom_field:
function wpspeed_register_custom_rest_field() {
register_rest_field('post', 'wpspeed_custom_field', [
'get_callback' => function($post) {
return get_post_meta($post['id'], 'wpspeed_custom_field', true);
},
'schema' => null,
]);
}
add_action('rest_api_init', 'wpspeed_register_custom_rest_field');Такое добавление позволяет клиенту получать только нужные данные, без излишков.
Кеширование ответов REST API для ускорения
Если API-запросы часто повторяются с одинаковыми параметрами, имеет смысл кешировать ответы. Сам WordPress не кеширует REST API по умолчанию, но можно добавить собственное кеширование в памяти или через транзиенты.
Пример кеширования ответа с использованием транзиентов:
function wpspeed_cached_rest_response(\WP_REST_Request $request) {
$cache_key = 'wpspeed_rest_' . md5(serialize($request->get_params()));
$cached = get_transient($cache_key);
if ($cached) {
return rest_ensure_response($cached);
}
// Ваш код генерации данных
$data = [
'time' => current_time('mysql'),
'message' => 'Данные сгенерированы заново'
];
set_transient($cache_key, $data, 60); // кеш на 60 секунд
return rest_ensure_response($data);
}
add_action('rest_api_init', function () {
register_rest_route('wpspeed/v1', '/cache-test', [
'methods' => 'GET',
'callback' => 'wpspeed_cached_rest_response',
]);
});Такой подход позволяет значительно снизить нагрузку при частых запросах.
Использование плагинов для оптимизации REST API
Существуют плагины, которые помогают контролировать и оптимизировать работу REST API, например:
- Clearfy Pro — позволяет отключать лишние эндпоинты и уменьшать нагрузку;
- WPRemark — помогает оптимизировать комментарии через REST API;
- Плагины кеширования, например, WP Super Cache, которые косвенно улучшают производительность API.
Использование этих инструментов совместно с кастомными фильтрами даёт максимальный эффект.
Контроль доступа и безопасность REST API
Оптимизация REST API должна идти рука об руку с безопасностью. Необходимо ограничивать доступ к чувствительным данным и эндпоинтам, чтобы избежать утечек.
Пример ограничения доступа к кастомному эндпоинту только для залогиненных пользователей:
function wpspeed_rest_permission_callback(\WP_REST_Request $request) {
return is_user_logged_in();
}
register_rest_route('wpspeed/v1', '/private-data', [
'methods' => 'GET',
'callback' => 'wpspeed_private_data_callback',
'permission_callback' => 'wpspeed_rest_permission_callback',
]);Без правильных проверок API может стать уязвимым и повлиять на производительность и безопасность сайта.