WordPress REST API открывает новые возможности для разработчиков, позволяя создавать интерактивные приложения и интеграции с внешними сервисами. В этой статье мы подробно рассмотрим, как создать и использовать REST API в WordPress, даже если вы только начинаете знакомство с этой технологией.
Что такое WordPress REST API и зачем он нужен
REST API — это интерфейс программирования, который позволяет взаимодействовать с сайтом WordPress через HTTP-запросы. С помощью API можно получать, создавать, обновлять и удалять контент, а также управлять настройками сайта. Это особенно полезно для создания мобильных приложений, одностраничных приложений на JavaScript и интеграций с внешними сервисами.
Начиная с версии 4.7, WordPress включает REST API по умолчанию, что упрощает работу с ним. Однако для создания собственных эндпоинтов и реализации специфичной логики потребуется написать свой код.
Создание собственного REST API эндпоинта в WordPress
Регистрация кастомного маршрута
Для создания собственного эндпоинта воспользуемся функцией register_rest_route. Ниже приведён пример регистрации маршрута /yelly/v1/message, который возвращает простое сообщение.
add_action('rest_api_init', function () {
register_rest_route('yelly/v1', '/message', array(
'methods' => 'GET',
'callback' => 'yelly_get_message',
));
});
function yelly_get_message(WP_REST_Request $request) {
return new WP_REST_Response(array(
'message' => 'Привет от Yelly REST API!'
), 200);
}Этот код нужно добавить в файл functions.php вашей темы или в собственный плагин. После этого запрос GET /wp-json/yelly/v1/message вернёт JSON с сообщением.
Обработка параметров запроса
Часто API эндпоинты требуют принимать параметры. Добавим параметр name, чтобы персонализировать ответ:
add_action('rest_api_init', function () {
register_rest_route('yelly/v1', '/greet', array(
'methods' => 'GET',
'callback' => 'yelly_greet_user',
'args' => array(
'name' => array(
'required' => false,
'validate_callback' => function($param, $request, $key) {
return is_string($param);
}
),
),
));
});
function yelly_greet_user(WP_REST_Request $request) {
$name = $request->get_param('name') ?: 'Гость';
return new WP_REST_Response(array(
'greeting' => "Привет, $name! Добро пожаловать на Yelly.ru"
), 200);
}Теперь можно отправлять запрос GET /wp-json/yelly/v1/greet?name=Иван и получать персонализированное приветствие.
Аутентификация в WordPress REST API
Для доступа к защищённым данным и выполнению операций изменения необходима аутентификация. В WordPress REST API поддерживаются несколько методов:
- Куки авторизации (для запросов с фронтенда сайта, где пользователь уже вошёл)
- Basic Auth (для простых тестов и разработок)
- OAuth 1.0a и JWT (для более защищённых интеграций)
Для примера рассмотрим базовую аутентификацию с использованием плагина Basic Auth. Установите и активируйте плагин Basic Auth, после чего можно отправлять запросы с заголовком:
Authorization: Basic base64_encode('username:password')Внутри кастомного эндпоинта можно получить данные текущего пользователя через wp_get_current_user() и ограничить доступ, например:
function yelly_protected_data(WP_REST_Request $request) {
if (!is_user_logged_in()) {
return new WP_REST_Response(array('error' => 'Доступ запрещён'), 403);
}
$user = wp_get_current_user();
return new WP_REST_Response(array('user_login' => $user->user_login), 200);
}Примеры полезных кастомных эндпоинтов
Получение списка последних постов
Можно создать эндпоинт, который возвращает последние записи блога со стандартными полями и дополнительной информацией.
add_action('rest_api_init', function () {
register_rest_route('yelly/v1', '/latest-posts', array(
'methods' => 'GET',
'callback' => 'yelly_get_latest_posts',
));
});
function yelly_get_latest_posts(WP_REST_Request $request) {
$args = array(
'numberposts' => 5,
'post_status' => 'publish'
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => get_the_title($post->ID),
'excerpt' => get_the_excerpt($post->ID),
'date' => get_the_date('', $post->ID),
'link' => get_permalink($post->ID)
);
}
return new WP_REST_Response($data, 200);
}Создание нового поста через API
Для создания записи через REST API необходимо использовать метод POST и аутентификацию. Пример эндпоинта:
add_action('rest_api_init', function () {
register_rest_route('yelly/v1', '/create-post', array(
'methods' => 'POST',
'callback' => 'yelly_create_post',
'permission_callback' => function () {
return current_user_can('edit_posts');
}
));
});
function yelly_create_post(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = sanitize_textarea_field($request->get_param('content'));
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'draft',
'post_author' => get_current_user_id(),
));
if (is_wp_error($post_id)) {
return new WP_REST_Response(array('error' => 'Ошибка создания поста'), 500);
}
return new WP_REST_Response(array('post_id' => $post_id, 'message' => 'Пост создан успешно'), 201);
}Полезные плагины для работы с WordPress REST API
Для удобства разработки и расширения функционала API рекомендуем использовать следующие плагины:
- WP REST API Controller — позволяет управлять доступом и настройками стандартных эндпоинтов без кода.
- JWT Authentication for WP REST API — добавляет поддержку JWT аутентификации для безопасных API запросов.
- Advanced Custom Fields (ACF) — с дополнением
ACF to REST APIдаёт возможность работать с произвольными полями через REST API.
Советы и лучшие практики при работе с REST API в WordPress
При создании и использовании REST API в WordPress важно придерживаться некоторых правил:
- Всегда валидируйте и санитизируйте входящие данные, чтобы избежать уязвимостей.
- Используйте
permission_callbackдля защиты эндпоинтов и проверки прав пользователя. - Документируйте свои эндпоинты, чтобы коллегам и клиентам было проще их использовать.
- При необходимости кешируйте ответы для снижения нагрузки на сервер.
WordPress REST API — мощный инструмент, который позволяет создать гибкие и современные решения для вашего сайта. Начинайте с простых эндпоинтов и постепенно усложняйте логику, используя приведённые примеры и советы.