Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с WordPress через HTTP-запросы. Он позволяет создавать, читать, обновлять и удалять данные сайта (посты, страницы, пользователи и другие типы контента) программно, без необходимости заходить в админку. Это особенно удобно при разработке мобильных приложений, SPA (Single Page Application), а также при создании сложных плагинов, которым нужно обмениваться данными с внешними сервисами.
В WordPress REST API встроен из коробки начиная с версии 4.7, что делает его использование простым и доступным для любого разработчика. Но для создания своих собственных эндпоинтов и расширения функционала потребуется написать немного PHP-кода и зарегистрировать свои маршруты.
Понимание и умение работать с REST API поможет вам создавать более гибкие и масштабируемые плагины и темы, а также интегрировать WordPress в современные веб-приложения.
Как зарегистрировать собственный REST API эндпоинт в плагине
Для примера создадим плагин, который добавляет простой REST API маршрут для вывода списка «задач» (tasks). Предположим, что у нас есть кастомный тип записи task, и мы хотим получить их через API.
Для регистрации маршрута используем хук rest_api_init и функцию register_rest_route. Вот базовый пример:
add_action('rest_api_init', 'wptool_register_task_routes');
function wptool_register_task_routes() {
register_rest_route('wptool/v1', '/tasks', array(
'methods' => 'GET',
'callback' => 'wptool_get_tasks',
'permission_callback' => function() { return current_user_can('read'); }
));
}
function wptool_get_tasks() {
$args = array('post_type' => 'task', 'posts_per_page' => 10);
$query = new WP_Query($args);
$tasks = array();
foreach ($query->posts as $post) {
$tasks[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'content' => $post->post_content
);
}
return $tasks;
}Этот код создает новый маршрут /wp-json/wptool/v1/tasks, который вернет JSON-массив задач. Обратите внимание, что для безопасности мы проверяем, что пользователь имеет право читать данные.
Подробности о параметрах register_rest_route
Функция register_rest_route принимает три параметра — пространство имён (namespace), маршрут (route) и массив опций. В опциях обязательно указывается метод (GET, POST, PUT, DELETE), callback-функция, которая будет обрабатывать запрос, и функция проверки доступа (permission_callback).
Вы можете создавать более сложные маршруты с параметрами, например, /tasks/(?P<id>\d+) для получения конкретной задачи по ID.
Пример POST-запроса: создание новой задачи через REST API
Добавим эндпоинт для создания новой задачи. Для этого зарегистрируем маршрут с методом POST и реализуем обработчик, который получит данные из запроса и создаст запись типа task.
add_action('rest_api_init', 'wptool_register_task_create_route');
function wptool_register_task_create_route() {
register_rest_route('wptool/v1', '/tasks', array(
'methods' => 'POST',
'callback' => 'wptool_create_task',
'permission_callback' => function() { return current_user_can('edit_posts'); }
));
}
function wptool_create_task(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = sanitize_textarea_field($request->get_param('content'));
if (empty($title)) {
return new WP_Error('no_title', 'Title is required', array('status' => 400));
}
$post_id = wp_insert_post(array(
'post_type' => 'task',
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish'
));
if (is_wp_error($post_id)) {
return $post_id;
}
return array('message' => 'Task created', 'id' => $post_id);
}Теперь, отправляя POST-запрос с параметрами title и content на /wp-json/wptool/v1/tasks, можно создавать новые задачи. Важно не забывать про безопасность: проверяем права пользователя и чистим входящие данные функциями sanitize_text_field и sanitize_textarea_field.
Полезные плагины для работы с REST API в WordPress
Для упрощения разработки и тестирования REST API можно использовать несколько полезных плагинов:
- WP REST API Controller — позволяет настраивать видимость и доступность эндпоинтов для разных типов записей и таксономий без написания кода.
- REST API Toolbox — добавляет расширенные настройки безопасности и контроля доступа к API.
- Postman (внешний инструмент) — удобный клиент для тестирования и отладки REST API запросов.
Использование этих инструментов поможет быстрее понять, как работает API, и настроить нужный функционал без лишних ошибок.
Обработка ошибок и безопасность в REST API плагинах
При разработке REST API важно внимательно относиться к безопасности и обработке ошибок. Никогда не доверяйте входящим данным, всегда проверяйте права пользователя через permission_callback. В случае ошибок возвращайте объекты WP_Error с понятными сообщениями и кодами HTTP.
Пример правильной обработки ошибки в callback-функции:
if (empty($title)) {
return new WP_Error('no_title', 'Title is required', array('status' => 400));
}Также стоит контролировать скорость запросов и использовать nonce или OAuth для аутентификации, если API открыто для внешних клиентов.
Выводы и рекомендации по использованию REST API в WordPress
REST API — мощный инструмент для создания современных расширений на базе WordPress. С его помощью можно реализовать сложные функциональные плагины, интегрировать сайт с внешними сервисами и строить новые интерфейсы.
Начинайте с простых маршрутов, тщательно проверяйте права доступа и входные данные, используйте возможности WordPress для обработки ошибок. Постепенно усложняйте логику и расширяйте API, учитывая потребности вашего проекта.
Практика и изучение примеров кода помогут быстро освоить REST API и вывести ваши разработки на новый уровень.