Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с сайтом WordPress через HTTP-запросы. Он позволяет получать, создавать, обновлять и удалять данные сайта программно, что открывает возможности для создания мобильных приложений, SPA (Single Page Application), интеграции с внешними сервисами и кастомных админ-панелей.
Начиная с версии 4.7 WordPress имеет встроенный REST API с набором стандартных эндпоинтов, например, для постов, страниц, пользователей и таксономий. Но часто возникает необходимость расширить функциональность и добавить свои собственные REST маршруты — например, для получения данных из кастомных таблиц или выполнения специфических операций.
В этом руководстве мы подробно рассмотрим, как создавать собственные REST API маршруты на WordPress, как работать с аутентификацией, как возвращать данные и обрабатывать запросы.
Создание собственного REST API маршрута в WordPress
Регистрация маршрута (endpoint)
Для регистрации собственного REST API маршрута используется функция register_rest_route. Она вызывается обычно на хук rest_api_init. Рассмотрим пример кода, который регистрирует маршрут /wpkey/v1/hello и возвращает простое приветствие.
add_action('rest_api_init', function () {
register_rest_route('wpkey/v1', '/hello', [
'methods' => 'GET',
'callback' => 'wpkey_hello_callback',
]);
});
function wpkey_hello_callback(WP_REST_Request $request) {
return ['message' => 'Привет от WPKey!'];
}В этом примере мы создали GET-эндпоинт, который возвращает JSON с полем message. Чтобы вызвать этот API, нужно отправить GET-запрос на https://ваш-сайт/wp-json/wpkey/v1/hello.
Обработка параметров запроса
Часто нужно передавать параметры в запросе. Рассмотрим пример, где мы принимаем параметр name и возвращаем персональное приветствие.
add_action('rest_api_init', function () {
register_rest_route('wpkey/v1', '/greet', [
'methods' => 'GET',
'callback' => 'wpkey_greet_callback',
'args' => [
'name' => [
'required' => true,
'validate_callback' => function ($param) {
return is_string($param) && !empty($param);
}
]
]
]);
});
function wpkey_greet_callback(WP_REST_Request $request) {
$name = $request->get_param('name');
return ['message' => 'Привет, ' . sanitize_text_field($name) . '!'];
}Теперь запрос /wp-json/wpkey/v1/greet?name=Иван вернет {"message":"Привет, Иван!"}.
Работа с данными WordPress через REST API
Получение постов с помощью собственного эндпоинта
Рассмотрим создание собственного эндпоинта, который возвращает список последних 5 постов с заголовками и ссылками в формате JSON.
add_action('rest_api_init', function () {
register_rest_route('wpkey/v1', '/latest-posts', [
'methods' => 'GET',
'callback' => 'wpkey_latest_posts_callback',
]);
});
function wpkey_latest_posts_callback(WP_REST_Request $request) {
$args = [
'numberposts' => 5,
'post_status' => 'publish'
];
$posts = get_posts($args);
$data = [];
foreach ($posts as $post) {
$data[] = [
'id' => $post->ID,
'title' => get_the_title($post),
'link' => get_permalink($post)
];
}
return $data;
}Это удобный способ предоставить внешний системе или приложению доступ к свежему контенту вашего сайта без использования стандартных REST маршрутов.
Создание и обновление постов через REST API
Для изменения данных через REST API требуется аутентификация и более сложная логика. Ниже пример обработки POST-запроса для создания нового поста. В этом примере мы используем базовую проверку прав пользователя.
add_action('rest_api_init', function () {
register_rest_route('wpkey/v1', '/create-post', [
'methods' => 'POST',
'callback' => 'wpkey_create_post_callback',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => [
'title' => ['required' => true],
'content' => ['required' => true],
]
]);
});
function wpkey_create_post_callback(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = wp_kses_post($request->get_param('content'));
$post_id = wp_insert_post([
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_author' => get_current_user_id(),
]);
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Ошибка при создании поста', ['status' => 500]);
}
return ['post_id' => $post_id, 'message' => 'Пост успешно создан'];
}Чтобы использовать этот эндпоинт, необходимо отправить POST-запрос с авторизацией (например, через cookie авторизации или JWT). В теле запроса должны быть поля title и content.
Полезные плагины для работы с REST API в WordPress
Для расширения возможностей REST API можно использовать готовые плагины. Вот несколько полезных:
- WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам и настраивать поля вывода.
- JWT Authentication for WP REST API — плагин для реализации аутентификации через JSON Web Token, что упрощает создание защищенных API-запросов.
- Advanced Custom Fields to REST API — расширяет стандартный REST API, добавляя данные пользовательских полей из ACF.
Использование этих плагинов позволяет быстро настроить мощное и безопасное REST API, не погружаясь глубоко в разработку.
Особенности безопасности при работе с REST API
При создании собственных маршрутов важно уделять внимание безопасности. Вот несколько рекомендаций:
- Используйте
permission_callbackдля проверки прав доступа. Не оставляйте публичные endpoint без ограничений, если они изменяют данные. - Валидация и очистка данных — обязательно фильтруйте входящие параметры, чтобы избежать XSS и SQL-инъекций.
- Аутентификация — применяйте современные методы, например, JWT, OAuth или cookie-авторизацию.
- Логирование ошибок и мониторинг — чтобы быстро выявлять и исправлять проблемы.
Безопасность — это ключевой момент при открытии API наружу.
Выводы и советы для разработчиков
REST API в WordPress — мощный инструмент, который существенно расширяет возможности взаимодействия с сайтом. Создание собственных эндпоинтов позволяет адаптировать сайт под уникальные задачи и интеграции. Важно тщательно продумывать архитектуру API, обеспечивать безопасность и использовать стандартные инструменты WordPress.
Начинайте с простых GET-запросов, постепенно добавляйте сложность, не забывайте про тестирование и документацию. Используйте плагины для упрощения аутентификации и расширения функционала. Такой подход позволит создать гибкую, масштабируемую и безопасную систему API для вашего сайта на WordPress.