REST API — мощный инструмент WordPress, который позволяет взаимодействовать с сайтом через HTTP-запросы. Но стандартный набор эндпоинтов может не всегда покрывать нужды проекта. В этом материале мы разберем, как создать собственные REST API эндпоинты в WordPress, чтобы расширить возможности вашего сайта и интегрировать его с внешними сервисами или мобильными приложениями.
Что такое REST API в WordPress и зачем создавать свои эндпоинты
WordPress REST API — это интерфейс для взаимодействия с сайтом через HTTP-запросы в формате JSON. Он позволяет получить, создать, обновить или удалить данные на сайте без необходимости заходить в админку, что особенно полезно для фронтенд-разработки, мобильных приложений и интеграций.
Однако стандартные эндпоинты (например, для постов, страниц, пользователей) не всегда охватывают все бизнес-задачи. Поэтому создание собственных эндпоинтов позволяет:
- Реализовать уникальную логику обработки данных.
- Предоставить кастомный набор данных клиенту.
- Организовать взаимодействие с нестандартными типами контента и метаданными.
Далее мы рассмотрим, как это сделать на практике.
Создание собственного REST API эндпоинта: пошаговое руководство
Регистрация нового маршрута
Для начала нам нужно зарегистрировать маршрут (endpoint) через хук rest_api_init. Пример кода для регистрации простого эндпоинта, который возвращает список популярных постов:
add_action('rest_api_init', function () {
register_rest_route('wppuzzle/v1', '/popular-posts/', array(
'methods' => 'GET',
'callback' => 'wppuzzle_get_popular_posts',
'permission_callback' => '__return_true',
));
});
function wppuzzle_get_popular_posts($request) {
$args = array(
'posts_per_page' => 5,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
);
$query = new WP_Query($args);
$posts = array();
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'link' => get_permalink(),
);
}
wp_reset_postdata();
return rest_ensure_response($posts);
}В этом примере мы зарегистрировали маршрут /wp-json/wppuzzle/v1/popular-posts/, который по GET-запросу возвращает топ-5 постов с максимальным количеством просмотров (предполагается, что у вас есть мета-поле post_views_count).
Обработка параметров запроса
REST API позволяет передавать параметры для фильтрации, пагинации и других целей. Добавим параметр posts_per_page для настройки количества выводимых постов:
add_action('rest_api_init', function () {
register_rest_route('wppuzzle/v1', '/popular-posts/', array(
'methods' => 'GET',
'callback' => 'wppuzzle_get_popular_posts',
'permission_callback' => '__return_true',
'args' => array(
'posts_per_page' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric($param) && $param > 0 && $param <= 20;
},
'default' => 5,
),
),
));
});
function wppuzzle_get_popular_posts($request) {
$posts_per_page = (int) $request->get_param('posts_per_page');
$args = array(
'posts_per_page' => $posts_per_page,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
);
$query = new WP_Query($args);
$posts = array();
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'link' => get_permalink(),
);
}
wp_reset_postdata();
return rest_ensure_response($posts);
}Теперь клиент может управлять количеством возвращаемых записей, передавая параметр в URL, например: /wp-json/wppuzzle/v1/popular-posts/?posts_per_page=10.
Обеспечение безопасности и прав доступа для собственных эндпоинтов
Очень важно контролировать, кто и что может делать через REST API. В параметре permission_callback мы можем указать проверку прав пользователя или токена авторизации.
Например, если эндпоинт должен быть доступен только авторизованным пользователям с ролью 'editor' или выше, используйте такой код:
function wppuzzle_permission_check() {
return current_user_can('edit_others_posts');
}
add_action('rest_api_init', function () {
register_rest_route('wppuzzle/v1', '/secure-data/', array(
'methods' => 'GET',
'callback' => 'wppuzzle_get_secure_data',
'permission_callback' => 'wppuzzle_permission_check',
));
});
function wppuzzle_get_secure_data() {
return rest_ensure_response(array('secret' => 'Это защищенные данные'));
}Без правильной проверки ваши эндпоинты могут стать уязвимыми для посторонних, что приведет к утечкам данных или нарушению работы сайта.
Примеры полезных плагинов для работы с REST API
Для расширения возможностей и удобства работы с REST API можно использовать следующие плагины:
- Clearfy Pro — оптимизация и защита REST API, отключение неиспользуемых эндпоинтов.
- WPRemark — расширение для отзывов с поддержкой REST API.
- WPStories — интеграция сторис с API.
Использование проверенных решений экономит время и повышает безопасность.
Лучшие практики и рекомендации при создании собственных REST API эндпоинтов
Используйте префиксы и версии API
Чтобы избежать конфликтов с другими плагинами и будущими обновлениями, обязательно используйте уникальные префиксы для ваших маршрутов, например, wppuzzle/v1. Нумерация версий поможет плавно развивать API без разрыва совместимости.
Валидация и санитизация входящих данных
Всегда проверяйте и фильтруйте параметры запроса с помощью validate_callback и функций WordPress для очистки данных. Это защитит от некорректного ввода и атак.
Пагинация и ограничение результатов
Если ваш эндпоинт возвращает большие объёмы данных, реализуйте пагинацию и ограничение максимального количества записей, чтобы не перегружать сервер и клиент.
Документируйте API
Поддержка понятной документации для ваших эндпоинтов поможет другим разработчикам использовать их правильно и эффективно.
Заключение
Создание собственных REST API эндпоинтов в WordPress — отличный способ расширить функциональность сайта и упростить интеграции. С помощью правильной регистрации маршрутов, обработки параметров и обеспечения безопасности вы сможете строить устойчивые и гибкие решения. Не забывайте использовать проверенные плагины, такие как Clearfy Pro, для повышения безопасности и оптимизации вашего REST API.