WordPress REST API — мощный инструмент для взаимодействия с сайтом через HTTP-запросы. Но стандартные эндпоинты не всегда покрывают все задачи, и часто требуется создать собственный кастомный REST endpoint для решения специфичных задач. В этой статье подробно рассмотрим, как добавить кастомный REST API endpoint в WordPress, разберем примеры кода и рекомендации по безопасности.
Что такое REST API endpoint в WordPress и зачем создавать кастомный?
REST API endpoint — это URL, на который можно отправлять запросы (GET, POST, DELETE и др.) для получения или изменения данных. WordPress по умолчанию предоставляет много эндпоинтов, например, для получения постов, таксономий, пользователей и т.д.
Однако, если у вас есть уникальные данные или логика, которую нужно предоставить через API, то стоит создавать кастомный endpoint. Это позволяет интегрировать WordPress с внешними сервисами, создавать мобильные приложения, расширять функционал сайта.
Примеры использования кастомных REST API endpoints
- Вывод кастомных метаданных о постах или пользователях.
- Прием данных из внешних форм или приложений.
- Автоматизация задач, например, массовое обновление данных.
- Интеграция с внешними CRM, ERP, или другими сервисами.
Добавление кастомного REST API endpoint в WordPress: пошаговое руководство
Для регистрации собственного endpoint используется хук rest_api_init и функция register_rest_route(). Ниже пошагово разберем процесс.
1. Регистрация маршрута
Создаем функцию для регистрации маршрута и вешаем на хук rest_api_init:
add_action('rest_api_init', 'wprus_register_custom_endpoint');
function wprus_register_custom_endpoint() {
register_rest_route('wprus/v1', '/data/', array(
'methods' => 'GET',
'callback' => 'wprus_handle_custom_endpoint',
'permission_callback' => '__return_true', // В дальнейшем замените на проверку прав
));
}
Здесь wprus/v1 — пространство имён API, /data/ — путь эндпоинта, а wprus_handle_custom_endpoint — функция-обработчик.
2. Обработка запроса и возврат данных
Функция-обработчик получает объект запроса WP_REST_Request и должна вернуть данные в формате массива или объекта, которые WordPress конвертирует в JSON:
function wprus_handle_custom_endpoint(WP_REST_Request $request) {
// Можно получить параметры запроса
$param = $request->get_param('example_param');
// Логика обработки
$data = array(
'message' => 'Привет от кастомного REST API!',
'received_param' => $param
);
return rest_ensure_response($data);
}
3. Проверка прав доступа
В параметре permission_callback нужно указать функцию, которая проверит, имеет ли текущий пользователь право выполнять этот запрос. Для публичных данных можно вернуть true, но для операций с изменением данных — обязательно проверяйте права:
function wprus_check_permission() {
return current_user_can('edit_posts');
}
register_rest_route('wprus/v1', '/data/', array(
'methods' => 'POST',
'callback' => 'wprus_handle_custom_endpoint',
'permission_callback' => 'wprus_check_permission',
));
Пример: кастомный endpoint для получения списка последних 5 постов с кастомным полем
Создадим endpoint /wprus/v1/recent-posts/, который вернет последние 5 постов с дополнительным кастомным полем subtitle.
add_action('rest_api_init', function () {
register_rest_route('wprus/v1', '/recent-posts/', array(
'methods' => 'GET',
'callback' => 'wprus_get_recent_posts',
'permission_callback' => '__return_true',
));
});
function wprus_get_recent_posts() {
$args = array(
'numberposts' => 5,
'post_status' => 'publish',
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$subtitle = get_post_meta($post->ID, 'subtitle', true);
$data[] = array(
'id' => $post->ID,
'title' => get_the_title($post),
'subtitle' => $subtitle,
'date' => get_the_date('', $post),
'link' => get_permalink($post),
);
}
return rest_ensure_response($data);
}
Лучшие практики и советы по работе с кастомными REST API в WordPress
Безопасность и права доступа
Обязательно проверяйте права доступа, особенно если ваш endpoint изменяет данные или возвращает конфиденциальную информацию. Используйте permission_callback и функции current_user_can() или is_user_logged_in().
Санитизация и валидация данных
Если ваш endpoint принимает параметры, валидируйте и санитизируйте их. Можно использовать аргумент args в register_rest_route() для описания параметров и их правил.
Кэширование ответов
Для снижения нагрузки на сервер можно использовать кэширование ответов, например, transient API или внешние кэш-сервисы. Особенно актуально для GET-запросов.
Документирование API
Обязательно документируйте свои кастомные endpoint, чтобы другие разработчики или интеграторы понимали, как их использовать. Можно использовать плагины для генерации документации.
Полезные плагины для работы с REST API в WordPress
- Clearfy Pro — оптимизация безопасности и управление REST API.
- WPGPT — расширение возможностей API с помощью ИИ.
Заключение
Добавление кастомных REST API endpoint в WordPress — мощный способ расширить функциональность сайта и интегрироваться с внешними системами. Важно грамотно организовать маршруты, обеспечить безопасность и удобство использования. Следуя описанным шагам и рекомендациям, вы сможете создавать надежные и эффективные API для любых задач.