Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с сайтом через HTTP-запросы. WordPress изначально поддерживает REST API, позволяя получать и изменять данные сайта через стандартные эндпоинты. Однако часто возникает необходимость расширить стандартный функционал и создать собственные кастомные маршруты для работы с уникальными данными или бизнес-логикой.
Создание собственного REST API позволяет интегрировать WordPress с внешними сервисами, мобильными приложениями, а также строить гибкие фронтенды на React, Vue или Angular, используя WordPress только как бекенд.
В этой статье мы подробно разберем, как создать простой REST API для WordPress, добавим кастомный маршрут, реализуем обработку данных и защиту запросов.
Регистрация кастомного REST API маршрута в WordPress
Для добавления собственного маршрута используется функция register_rest_route, которую нужно вызывать на хуке rest_api_init. Рассмотрим пример создания маршрута /wpwp/v1/hello, который возвращает простое приветствие.
add_action('rest_api_init', 'wpwp_register_hello_route');
function wpwp_register_hello_route() {
register_rest_route('wpwp/v1', '/hello', [
'methods' => 'GET',
'callback' => 'wpwp_hello_callback',
'permission_callback' => '__return_true',
]);
}
function wpwp_hello_callback(\WP_REST_Request $request) {
return [
'message' => 'Привет от wpwp.ru REST API!'
];
}
Этот код нужно добавить в файл функций темы functions.php или в плагин. После этого по адресу https://ваш-сайт/wp-json/wpwp/v1/hello вы получите JSON с сообщением.
Добавление параметров и валидация запросов в REST API
Для более сложных сценариев часто требуется принимать параметры от клиента и валидировать их. Добавим маршрут, который принимает параметр name и возвращает персональное приветствие.
add_action('rest_api_init', 'wpwp_register_greet_route');
function wpwp_register_greet_route() {
register_rest_route('wpwp/v1', '/greet', [
'methods' => 'GET',
'callback' => 'wpwp_greet_callback',
'permission_callback' => '__return_true',
'args' => [
'name' => [
'required' => true,
'validate_callback' => function($param, $request, $key) {
return is_string($param) && strlen($param) > 0;
}
]
]
]);
}
function wpwp_greet_callback(\WP_REST_Request $request) {
$name = sanitize_text_field($request->get_param('name'));
return [
'message' => "Привет, $name! Добро пожаловать в wpwp.ru REST API."
];
}
Теперь можно делать запросы вида /wp-json/wpwp/v1/greet?name=Иван, и API вернет персональное приветствие.
Защита REST API: проверка прав и аутентификация
В реальных проектах важно ограничить доступ к некоторым маршрутам, чтобы данные не мог получить неавторизованный пользователь. Для этого реализуется функция permission_callback, которая проверяет права доступа.
Например, ограничим доступ к маршруту только для администраторов:
function wpwp_permission_check() {
return current_user_can('manage_options');
}
add_action('rest_api_init', function() {
register_rest_route('wpwp/v1', '/admin-data', [
'methods' => 'GET',
'callback' => 'wpwp_admin_data_callback',
'permission_callback' => 'wpwp_permission_check',
]);
});
function wpwp_admin_data_callback(\WP_REST_Request $request) {
return [
'secret' => 'Это данные, доступные только администраторам'
];
}
Если неавторизованный пользователь попробует обратиться к /wp-json/wpwp/v1/admin-data, он получит ошибку 403 Forbidden.
Пример использования REST API для создания записи (POST запрос)
REST API поддерживает различные HTTP методы. Рассмотрим пример создания новой записи типа post с помощью POST запроса.
add_action('rest_api_init', function() {
register_rest_route('wpwp/v1', '/create-post', [
'methods' => 'POST',
'callback' => 'wpwp_create_post_callback',
'permission_callback' => function() {
return current_user_can('edit_posts');
},
'args' => [
'title' => [
'required' => true,
'sanitize_callback' => 'sanitize_text_field',
],
'content' => [
'required' => true,
'sanitize_callback' => 'wp_kses_post',
],
],
]);
});
function wpwp_create_post_callback(\WP_REST_Request $request) {
$title = $request->get_param('title');
$content = $request->get_param('content');
$post_id = wp_insert_post([
'post_title' => $title,
'post_content' => $content,
'post_status' => 'draft',
'post_type' => 'post',
]);
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Не удалось создать запись', ['status' => 500]);
}
return [
'post_id' => $post_id,
'message' => 'Запись успешно создана в статусе черновика'
];
}
Такой маршрут удобно использовать для интеграции с внешними сервисами или мобильными приложениями, которые хотят добавлять контент на сайт.
Полезные плагины для работы с REST API в WordPress
Кроме ручного создания маршрутов, существуют плагины, которые расширяют и упрощают работу с REST API:
- WP REST API Controller — позволяет через интерфейс включать или отключать стандартные эндпоинты и создавать свои.
- JWT Authentication for WP REST API — добавляет поддержку аутентификации через JWT-токены, что удобно для защищенных запросов из внешних приложений.
- Advanced Custom Fields to REST API — расширяет REST API, добавляя поля из плагина ACF в JSON-ответы.
Использование этих плагинов поможет быстро настроить и обезопасить API без глубокого погружения в программирование.
Советы по отладке и тестированию REST API
Для тестирования собственных маршрутов удобно использовать инструменты:
- Postman — мощный клиент для отправки HTTP-запросов с поддержкой разных методов, заголовков и тела.
- curl — командная строка для отправки запросов, например:
curl -X GET https://ваш-сайт/wp-json/wpwp/v1/hello - Браузер — для простых GET-запросов можно просто открыть URL в браузере.
Если возникают ошибки, проверяйте логи сервера и включайте WP_DEBUG в wp-config.php для отображения подробностей.
Итог: расширяем WordPress с помощью собственного REST API
Создание собственного REST API в WordPress — мощный инструмент, который открывает новые возможности для интеграций и разработки. С помощью нескольких функций и хуков можно быстро добавить нужные маршруты, обработать параметры и обеспечить безопасность доступа.
В этой статье мы разобрали базовые приемы: регистрацию маршрутов, прием параметров, защиту прав доступа, создание записей через POST, а также полезные плагины и инструменты для работы.
Если вы хотите сделать ваш сайт более гибким и современным, изучение и использование REST API — обязательный шаг.