Что такое REST API в WordPress и зачем он нужен
REST API — это современный интерфейс взаимодействия с WordPress через HTTP-запросы. Он позволяет получать, изменять и удалять данные сайта вне стандартной админ-панели, открывая возможности для создания мобильных приложений, одностраничных сайтов (SPA) и интеграций с внешними сервисами.
С помощью REST API можно работать с постами, страницами, пользователями, комментариями и другими объектами WordPress. Это особенно полезно, если нужно создать кастомные интерфейсы или автоматизировать задачи.
WordPress изначально поставляется с REST API, который активен по умолчанию начиная с версии 4.7, что значительно упрощает разработку. В этой статье мы подробно рассмотрим, как использовать REST API, примеры запросов и настройки безопасности.
Основные возможности REST API WordPress
REST API позволяет:
- Получать списки и отдельные записи постов, страниц, медиафайлов и других типов записей;
- Создавать, обновлять и удалять записи (при наличии прав доступа);
- Работать с метаданными, таксономиями, комментариями, пользователями;
- Расширять API собственными маршрутами и эндпоинтами;
- Использовать стандартные HTTP-методы: GET, POST, PUT, DELETE, PATCH;
- Авторизоваться через cookie или OAuth для защиты данных.
Поддержка JSON формата облегчает интеграцию с современными фреймворками и языками программирования.
Пример: Получение списка последних постов через REST API
Самый простой запрос к REST API — получить последние записи. Для этого достаточно отправить GET-запрос по URL:
https://wpboot.ru/wp-json/wp/v2/postsЭтот запрос вернёт JSON-массив из последних записей блога. Можно добавить параметры, например, "per_page=5", чтобы получить ровно 5 записей:
https://wpboot.ru/wp-json/wp/v2/posts?per_page=5Ответ содержит поля: ID, заголовок, контент, дату публикации и другие данные. Вот пример обработки такого ответа на JavaScript с использованием fetch:
fetch('https://wpboot.ru/wp-json/wp/v2/posts?per_page=5')
.then(response => response.json())
.then(posts => {
posts.forEach(post => {
console.log(post.title.rendered);
});
});Как получить конкретную запись
Чтобы получить данные одной записи по ID, используйте URL с ID записи, например:
https://wpboot.ru/wp-json/wp/v2/posts/123Где 123 — ID нужного поста. В ответ придёт JSON с деталями этой записи.
Создание и обновление записей через REST API с авторизацией
Для создания и изменения данных требуется авторизация. Наиболее простой способ — использовать cookie-авторизацию, если запросы идут с фронтенда сайта, или применять OAuth/JWT для внешних приложений.
Пример создания записи с помощью fetch и cookie-авторизации:
fetch('https://wpboot.ru/wp-json/wp/v2/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-WP-Nonce': wpboot_getNonce() // функция, возвращающая nonce
},
body: JSON.stringify({
title: 'Новая запись через REST API',
content: 'Текст записи...',
status: 'publish'
})
})
.then(response => response.json())
.then(data => console.log(data));Чтобы получить nonce, обычно в теме или плагине добавляют в локализацию скриптов PHP-функцию:
function wpboot_localize_scripts() {
wp_localize_script('main-js', 'wpboot', [
'nonce' => wp_create_nonce('wp_rest')
]);
}
add_action('wp_enqueue_scripts', 'wpboot_localize_scripts');И в JavaScript вызывают wpboot.nonce.
Обновление записи
Для обновления записи используется метод PUT или POST с указанием ID записи:
fetch('https://wpboot.ru/wp-json/wp/v2/posts/123', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-WP-Nonce': wpboot_getNonce()
},
body: JSON.stringify({
title: 'Обновлённый заголовок'
})
});Создание собственного эндпоинта REST API в WordPress
Иногда стандартных маршрутов недостаточно, и нужно создать собственный маршрут для специфических данных или логики.
Для этого добавим в functions.php следующий код:
function wpboot_register_custom_route() {
register_rest_route('wpboot/v1', '/message/', [
'methods' => 'GET',
'callback' => 'wpboot_handle_custom_message',
'permission_callback' => '__return_true'
]);
}
add_action('rest_api_init', 'wpboot_register_custom_route');
function wpboot_handle_custom_message($request) {
return ['message' => 'Привет от REST API wpboot!'];
}Теперь по адресу https://wpboot.ru/wp-json/wpboot/v1/message/ можно получить JSON с сообщением.
Добавление параметров и проверка прав
Можно расширить эндпоинт, принимая параметры и проверяя права пользователя:
function wpboot_register_custom_route() {
register_rest_route('wpboot/v1', '/user-data/', [
'methods' => 'GET',
'callback' => 'wpboot_get_user_data',
'permission_callback' => function() {
return current_user_can('read');
}
]);
}
function wpboot_get_user_data($request) {
$user_id = $request->get_param('id');
$user = get_userdata($user_id);
if (!$user) {
return new WP_Error('no_user', 'Пользователь не найден', ['status' => 404]);
}
return [
'ID' => $user->ID,
'login' => $user->user_login,
'email' => $user->user_email
];
}Безопасность при работе с REST API WordPress
REST API открывает множество возможностей, но требует внимания к безопасности:
- Используйте nonce для защиты POST/PUT/DELETE запросов;
- Настраивайте
permission_callbackдля собственных маршрутов; - Ограничивайте публичные данные, не раскрывайте лишнюю информацию;
- Проверяйте и фильтруйте входящие данные;
- Отключайте REST API полностью или частично, если он не нужен.
Для отключения REST API для неавторизованных пользователей можно добавить в functions.php:
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error('rest_cannot_access', 'Доступ запрещён', ['status' => 401]);
}
return $result;
});Полезные плагины для работы с REST API в WordPress
Для расширения возможностей REST API рекомендуем обратить внимание на следующие плагины:
- WP REST API Controller — удобный интерфейс для управления доступом к REST API и кастомными типами записей;
- JWT Authentication for WP REST API — добавляет поддержку JSON Web Token для безопасности;
- Advanced Custom Fields to REST API — расширяет данные REST API, добавляя поля ACF;
- REST API Toolbox — инструмент для настройки и ограничения REST API запросов.
Использование этих плагинов позволяет быстро и гибко настраивать API под свои задачи.