WordPress REST API — мощный инструмент, который позволяет взаимодействовать с сайтом через стандартизированные HTTP-запросы. С его помощью можно создавать динамические приложения, мобильные клиенты, а также расширять функциональность сайта. В этой статье мы подробно разберём, как создать собственный REST API эндпоинт в WordPress и использовать его в простом плагине.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия между клиентом и сервером. В WordPress REST API даёт возможность получать, создавать, обновлять и удалять данные сайта (посты, страницы, пользователи и т.д.) через HTTP-запросы.
Это особенно полезно, если вы хотите:
- Создать одностраничное приложение (SPA) на React, Vue или другом фреймворке, используя WordPress как backend;
- Интегрировать сайт с внешними сервисами;
- Добавить собственные API методы для специфической логики вашего сайта или плагина;
- Использовать мобильные приложения, которые будут обращаться к WordPress через REST API.
По умолчанию WordPress предоставляет множество стандартных эндпоинтов, например, для постов, таксономий, пользователей. Но часто возникает необходимость расширить API своими методами.
Создание собственного REST API эндпоинта — базовый пример
Давайте рассмотрим, как создать свой простой плагин с REST API методом, который будет возвращать данные о текущем пользователе.
Шаг 1. Структура плагина
Создайте папку wpbook-rest-api-example в директории wp-content/plugins и файл wpbook-rest-api-example.php внутри неё.
Шаг 2. Основной код плагина
<?php
/**
* Plugin Name: WPBook REST API Example
* Description: Пример создания собственного REST API эндпоинта в WordPress
* Version: 1.0
* Author: WPBook
*/
// Регистрируем REST API маршрут
add_action('rest_api_init', 'wpbook_restapi_register_routes');
function wpbook_restapi_register_routes() {
register_rest_route('wpbook/v1', '/current-user', array(
'methods' => 'GET',
'callback' => 'wpbook_restapi_get_current_user',
'permission_callback' => function () {
return is_user_logged_in();
}
));
}
// Обработчик запроса
function wpbook_restapi_get_current_user(WP_REST_Request $request) {
$user = wp_get_current_user();
if ($user->ID === 0) {
return new WP_Error('no_user', 'Пользователь не авторизован', array('status' => 401));
}
return array(
'ID' => $user->ID,
'login' => $user->user_login,
'email' => $user->user_email,
'display_name' => $user->display_name
);
}
В этом коде мы создаём маршрут /wp-json/wpbook/v1/current-user, который возвращает данные текущего авторизованного пользователя. Если пользователь не авторизован, возвращается ошибка 401.
Тестирование собственного REST API эндпоинта
Чтобы проверить работу, авторизуйтесь в админке WordPress и откройте в браузере или Postman следующий URL:
https://ваш-сайт.ru/wp-json/wpbook/v1/current-user
Вы должны увидеть JSON с данными пользователя:
{
"ID": 1,
"login": "admin",
"email": "admin@example.com",
"display_name": "Администратор"
}
Если вы не авторизованы, получите ошибку:
{
"code": "no_user",
"message": "Пользователь не авторизован",
"data": {
"status": 401
}
}
Расширение функционала: REST API и сохранение данных
REST API позволяет не только получать данные, но и создавать или изменять их. Рассмотрим пример, как добавить эндпоинт для обновления мета-поля пользователя.
Добавление эндпоинта для обновления пользовательских данных
add_action('rest_api_init', function () {
register_rest_route('wpbook/v1', '/update-meta', array(
'methods' => 'POST',
'callback' => 'wpbook_restapi_update_user_meta',
'permission_callback' => function () {
return current_user_can('edit_user', get_current_user_id());
},
'args' => array(
'meta_key' => array('required' => true, 'type' => 'string'),
'meta_value' => array('required' => true, 'type' => 'string')
)
));
});
function wpbook_restapi_update_user_meta(WP_REST_Request $request) {
$user_id = get_current_user_id();
$meta_key = sanitize_text_field($request->get_param('meta_key'));
$meta_value = sanitize_text_field($request->get_param('meta_value'));
if (empty($meta_key)) {
return new WP_Error('missing_meta_key', 'Не указан ключ мета-поля', array('status' => 400));
}
update_user_meta($user_id, $meta_key, $meta_value);
return array('success' => true, 'meta_key' => $meta_key, 'meta_value' => $meta_value);
}
Теперь, отправляя POST-запрос на /wp-json/wpbook/v1/update-meta с параметрами meta_key и meta_value, мы можем обновлять мета-данные текущего пользователя.
Практические советы и безопасность при работе с REST API
При создании собственных REST API методов важно учитывать несколько моментов:
- Проверка прав доступа. Используйте
permission_callbackдля ограничения доступа к API. Это поможет избежать утечки данных или несанкционированных изменений. - Валидация и санитизация данных. Все входящие данные должны пройти проверку и очистку, чтобы предотвратить XSS и SQL-инъекции.
- Обработка ошибок. Возвращайте информативные ошибки с правильными HTTP статусами, чтобы клиент мог адекватно реагировать.
- Использование nonce и аутентификации. Для защищённых запросов применяйте nonce или OAuth, особенно если API будет использоваться снаружи.
Полезные плагины для работы с REST API в WordPress
Кроме ручного написания кода, существуют плагины, облегчающие работу с REST API:
- WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам без программирования.
- ACF to REST API — расширяет REST API для полей, созданных через Advanced Custom Fields.
- REST API Log — полезен для отладки и мониторинга API-запросов.
Эти инструменты помогут ускорить разработку и повысить безопасность.
Заключение
REST API в WordPress — это мощный механизм для создания современных гибких решений. Создавая собственные эндпоинты, вы можете реализовать уникальные задачи, интегрироваться с внешними сервисами и улучшить пользовательский опыт. Ключ к успеху — аккуратное планирование, соблюдение безопасности и грамотное тестирование.