REST API в WordPress — мощный инструмент, который позволяет создавать гибкие и масштабируемые приложения, взаимодействующие с сайтом. В этой статье мы подробно разберём, как создавать нестандартные запросы к REST API, чтобы получить именно те данные, которые нужны, и как расширять стандартный функционал WP REST API под свои задачи.
Что такое REST API в WordPress и зачем нужны нестандартные запросы
WordPress из коробки предоставляет REST API, через который можно получать, создавать, изменять и удалять записи, страницы, пользователей и другие стандартные типы данных. Однако часто возникает задача получить данные, которые не лежат в стандартных эндпоинтах, или отфильтровать информацию по особым параметрам. Для этого и нужны нестандартные запросы и расширения API.
Например, если у вас есть кастомный тип записи с метаполями, а стандартный эндпоинт не возвращает нужные данные, можно добавить свои поля и фильтры. Либо сделать собственный маршрут (endpoint), который будет выполнять сложные запросы и возвращать данные в нужном формате.
Такой подход полезен для создания SPA, мобильных приложений, интеграций с внешними сервисами и любых проектов, которым нужен доступ к данным WordPress через API.
Расширение стандартных эндпоинтов: добавление своих полей к ответу
Чтобы в ответе REST API появились дополнительные данные, например, метаполя или пользовательские таксономии, можно зарегистрировать новые поля с помощью функции register_rest_field. Это позволит получать нужную информацию без создания нового маршрута.
Пример: добавление метаполя 'wptem_rating' к постам
function wptem_register_custom_rest_field() {
register_rest_field('post', 'wptem_rating', array(
'get_callback' => function($post) {
return get_post_meta($post['id'], 'wptem_rating', true);
},
'schema' => null,
));
}
add_action('rest_api_init', 'wptem_register_custom_rest_field');
Теперь при запросе /wp-json/wp/v2/posts в ответе появится поле wptem_rating с нужным значением.
Создание собственного REST API маршрута для сложных запросов
Если стандартных эндпоинтов недостаточно, можно создать собственный маршрут, который будет обрабатывать запросы и возвращать данные в нужном формате. Это особенно полезно, когда нужно выполнить сложную логику выборки или объединить разные типы данных.
Пример: маршрут для получения постов с рейтингом выше заданного значения
function wptem_register_custom_route() {
register_rest_route('wptem/v1', '/top-posts/(?P<min_rating>\d+)', array(
'methods' => 'GET',
'callback' => 'wptem_get_top_posts',
'args' => array(
'min_rating' => array(
'validate_callback' => 'is_numeric',
),
),
));
}
add_action('rest_api_init', 'wptem_register_custom_route');
function wptem_get_top_posts($request) {
$min_rating = intval($request['min_rating']);
$query = new WP_Query(array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'wptem_rating',
'value' => $min_rating,
'compare' => '>=',
'type' => 'NUMERIC',
),
),
'posts_per_page' => 10,
));
$posts = array();
foreach ($query->posts as $post) {
$posts[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'rating' => get_post_meta($post->ID, 'wptem_rating', true),
'link' => get_permalink($post->ID),
);
}
return rest_ensure_response($posts);
}
Запрос к /wp-json/wptem/v1/top-posts/4 вернёт 10 постов с рейтингом 4 и выше.
Практические советы по безопасности и производительности при работе с REST API
При создании своих маршрутов важно учитывать безопасность. Например, если данные чувствительные, нужно проверять права пользователя через current_user_can() или аутентификацию. Также стоит ограничивать количество возвращаемых записей, чтобы избежать больших нагрузок на сервер.
Для кеширования ответов можно использовать transient API или плагины кэширования, чтобы не запускать тяжелые запросы слишком часто.
Если нужны фильтры по сложным параметрам, лучше использовать WP_Query с мета-запросами и таксономиями, а не писать прямые SQL-запросы, чтобы сохранить совместимость и безопасность.
Полезные плагины для работы с REST API в WordPress
Есть несколько плагинов, которые помогут расширить возможности REST API без написания кода:
- WP REST API Controller — удобный интерфейс для управления доступными эндпоинтами и полями.
- ACF to REST API — добавляет поля Advanced Custom Fields в REST API ответы.
- JWT Authentication for WP REST API — позволяет реализовать авторизацию через JWT для защищённых запросов.
- Clearfy Pro — оптимизирует и расширяет REST API, улучшая безопасность и производительность.
Выбирайте плагины в зависимости от задачи. Например, для работы с ACF и REST API отлично подойдёт ACF to REST API.
Заключение
REST API — это мощный инструмент в арсенале разработчика WordPress. Создавая нестандартные запросы и расширяя API, вы сможете гибко управлять данными сайта и интегрировать WordPress в любые современные решения. Важно соблюдать лучшие практики безопасности и производительности, а также использовать готовые плагины, чтобы ускорить разработку.