REST API в WordPress — мощный инструмент для разработчиков, позволяющий создавать гибкие и масштабируемые решения, взаимодействующие с сайтом через HTTP-запросы. В этой статье подробно разберём, как использовать REST API для создания собственных эндпоинтов, обработки данных и расширения функционала сайта.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия между клиентом и сервером по протоколу HTTP. В WordPress REST API реализован с версии 4.7, что позволяет работать с контентом сайта, пользователями, метаданными и другими объектами через стандартные методы GET, POST, PUT, DELETE.
Преимущества использования REST API:
- Возможность создавать SPA (Single Page Application) и мобильные приложения, которые общаются с сайтом через API.
- Расширение функционала без изменения темы и плагинов.
- Интеграция с внешними сервисами и системами.
Пример базового запроса для получения списка постов:
GET https://wponline.ru/wp-json/wp/v2/postsОтвет приходит в формате JSON с данными постов.
Создание кастомного эндпоинта REST API в WordPress
Чтобы добавить собственный эндпоинт, нужно зарегистрировать маршрут и описать контроллер, который будет обрабатывать запросы. Для этого используем хуки WordPress.
Регистрация маршрута
Добавим следующий код в файл плагина или functions.php темы:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/hello/', array(
'methods' => 'GET',
'callback' => 'wponline_hello_endpoint',
));
});Здесь мы регистрируем маршрут /wp-json/wponline/v1/hello/ с методом GET, который вызывает функцию wponline_hello_endpoint.
Обработка запроса
Теперь создадим функцию-обработчик:
function wponline_hello_endpoint(WP_REST_Request $request) {
return new WP_REST_Response(array(
'message' => 'Привет от WPOnline REST API!'
), 200);
}При обращении к эндпоинту вернётся JSON с сообщением.
Работа с параметрами запроса и валидация
Часто требуется принимать параметры для фильтрации или обработки данных. Рассмотрим пример с параметром name:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/greet/', array(
'methods' => 'GET',
'callback' => 'wponline_greet_user',
'args' => array(
'name' => array(
'required' => true,
'validate_callback' => function($param, $request, $key) {
return is_string($param) && !empty($param);
},
),
),
));
});
function wponline_greet_user(WP_REST_Request $request) {
$name = sanitize_text_field($request->get_param('name'));
return new WP_REST_Response(array(
'message' => 'Привет, ' . $name . '! Добро пожаловать на wponline.ru.'
), 200);
}В этом примере при запросе /wp-json/wponline/v1/greet/?name=Иван вернётся приветствие с именем пользователя.
Создание POST-запроса для добавления данных через REST API
Для обработки POST-запросов необходимо добавить соответствующий маршрут и реализовать сохранение данных. Допустим, мы хотим добавить заметку:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/note/', array(
'methods' => 'POST',
'callback' => 'wponline_create_note',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => array(
'content' => array(
'required' => true,
'validate_callback' => function($param) {
return is_string($param) && !empty($param);
},
),
),
));
});
function wponline_create_note(WP_REST_Request $request) {
$content = sanitize_text_field($request->get_param('content'));
$post_id = wp_insert_post(array(
'post_title' => wp_trim_words($content, 5, '...'),
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'note'
));
if (is_wp_error($post_id)) {
return new WP_REST_Response(array('error' => 'Ошибка при создании заметки'), 500);
}
return new WP_REST_Response(array('success' => true, 'id' => $post_id), 201);
}Обратите внимание на permission_callback, который проверяет права текущего пользователя. Без этой проверки POST-запросы могут быть небезопасны.
Полезные плагины для работы с REST API
Существуют плагины, которые расширяют возможности REST API или упрощают работу с ним:
- WP REST API Controller — позволяет управлять видимостью полей и эндпоинтов из админки.
- Advanced Custom Fields (ACF) to REST API — добавляет данные пользовательских полей ACF в стандартные REST-эндпоинты.
- JWT Authentication for WP REST API — добавляет возможность аутентификации по JWT для защиты API.
Эти инструменты особенно полезны, если вы создаёте сложные приложения на базе WordPress.
Отладка и тестирование REST API
Для тестирования API удобно использовать инструменты типа Postman или curl. Например, получить список постов можно так:
curl https://wponline.ru/wp-json/wp/v2/postsА для вызова кастомного эндпоинта с параметром:
curl "https://wponline.ru/wp-json/wponline/v1/greet/?name=Алексей"Для отладки также полезны плагины, которые логируют запросы, например Query Monitor.
Безопасность при работе с REST API
При создании своих эндпоинтов важно учитывать безопасность:
- Используйте
permission_callbackдля проверки прав пользователя. - Обрабатывайте и валидируйте входящие данные.
- Не открывайте критичные операции для всех пользователей.
Следуйте этим рекомендациям, чтобы избежать уязвимостей.
Резюме: возможности REST API и примеры на практике
REST API открывает огромные возможности для интеграции, расширения и автоматизации WordPress-сайтов. В статье мы рассмотрели:
- Основы работы с REST API.
- Как создать кастомный эндпоинт с GET и POST методами.
- Как принимать и валидировать параметры.
- Плагины для упрощения работы с API.
- Вопросы безопасности и отладки.
Используйте примеры из статьи, чтобы создавать собственные уникальные функции на базе WordPress REST API и делать сайты более функциональными и современными.