REST API — это мощный инструмент WordPress, который позволяет взаимодействовать с сайтом через HTTP-запросы. С его помощью можно создавать мобильные приложения, интегрировать сторонние сервисы, получать и изменять данные сайта без необходимости заходить в админку. В этой статье мы подробно разберём, как использовать REST API в WordPress, создавать собственные эндпоинты и расширять функционал сайта.
Что такое REST API в WordPress и зачем он нужен
REST API — это интерфейс программирования приложений, основанный на архитектуре REST, который позволяет обращаться к данным сайта через стандартные HTTP-методы: GET, POST, PUT, DELETE и др. В WordPress REST API встроен из коробки начиная с версии 4.7 и обеспечивает доступ к записям, страницам, пользователям, комментариям и другим типам данных.
Основные преимущества использования REST API:
- Позволяет создавать SPA (одностраничные приложения) на React, Vue и других фреймворках;
- Упрощает интеграцию с мобильными приложениями;
- Облегчает создание кастомных интерфейсов и панелей администрирования;
- Позволяет расширять функционал сайта без вмешательства в шаблоны.
Как создавать свои собственные REST API эндпоинты в WordPress
Иногда стандартных маршрутов REST API недостаточно, и необходимо добавить свои. Для этого используется функция register_rest_route, которая позволяет зарегистрировать новый путь и задать обработчики запросов.
Рассмотрим пример создания собственного эндпоинта, который будет возвращать список последних пяти кастомных записей типа portfolio с дополнительным полем project_url.
add_action('rest_api_init', function () {
register_rest_route('wp-shablon/v1', '/portfolio/', array(
'methods' => 'GET',
'callback' => 'wp_shablon_get_portfolio',
'permission_callback' => '__return_true',
));
});
function wp_shablon_get_portfolio() {
$args = array(
'post_type' => 'portfolio',
'posts_per_page' => 5,
'post_status' => 'publish'
);
$query = new WP_Query($args);
$items = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$items[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'link' => get_permalink(),
'project_url' => get_post_meta(get_the_ID(), 'project_url', true),
);
}
wp_reset_postdata();
}
return $items;
}В данном коде мы регистрируем новый маршрут /wp-shablon/v1/portfolio/, который при GET-запросе вернёт массив из пяти последних записей типа portfolio. Обработчик wp_shablon_get_portfolio формирует ответ с нужными полями.
Разбор параметров register_rest_route
Первый параметр — пространство имён API, его стоит делать уникальным для вашего проекта, например, используя приставку домена. Второй параметр — путь маршрута. Третий — массив параметров, в котором задаются методы, callback-функция и функция проверки прав доступа.
Функция permission_callback отвечает за безопасность: она должна проверять, можно ли текущему пользователю выполнять запрос. В нашем примере мы позволили всем обращаться к эндпоинту, но для приватных данных нужно реализовать проверку.
Примеры полезных плагинов для работы с REST API в WordPress
Для расширения возможностей REST API существуют готовые плагины, которые облегчают разработку и добавляют функционал:
- WP REST API Controller — позволяет управлять доступом к REST API для различных типов записей и полей без кода;
- ACF to REST API — добавляет к ответам REST API данные из плагина Advanced Custom Fields (ACF); очень удобно для работы с кастомными метаданными;
- JWT Authentication for WP REST API — добавляет поддержку JWT-токенов для аутентификации и авторизации запросов;
- WP OAuth Server — реализует полноценный OAuth2 сервер для безопасного доступа к REST API.
Использование этих плагинов позволяет быстрее создавать надёжные и удобные API без глубокого погружения в детали безопасности и формата данных.
Практическое применение REST API: интеграция с внешним приложением
Представим ситуацию, когда нужно вывести последние новости сайта WordPress в мобильном приложении на React Native. Для этого мобильное приложение будет обращаться к стандартному REST API эндпоинту WordPress /wp-json/wp/v2/posts.
Пример запроса с помощью fetch:
fetch('https://wp-shablon.ru/wp-json/wp/v2/posts?per_page=5')
.then(response => response.json())
.then(data => {
console.log(data); // Обрабатываем полученные записи
})
.catch(error => console.error(error));Если нужно получать дополнительные данные, например, поля ACF, то стоит установить плагин ACF to REST API. После этого данные будут включены в ответ, и их можно будет использовать в приложении.
Обработка POST-запросов для создания записей
REST API позволяет не только получать данные, но и создавать новые записи. Для примера создадим эндпоинт, который позволит зарегистрированным пользователям добавлять отзывы.
add_action('rest_api_init', function () {
register_rest_route('wp-shablon/v1', '/reviews/', array(
'methods' => 'POST',
'callback' => 'wp_shablon_create_review',
'permission_callback' => function () {
return is_user_logged_in();
},
'args' => array(
'title' => array('required' => true),
'content' => array('required' => true),
'rating' => array('required' => true),
),
));
});
function wp_shablon_create_review(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = sanitize_textarea_field($request->get_param('content'));
$rating = intval($request->get_param('rating'));
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_type' => 'review',
'post_status' => 'pending',
'post_author' => get_current_user_id(),
));
if (is_wp_error($post_id)) {
return new WP_Error('cannot_create', 'Не удалось создать отзыв', array('status' => 500));
}
update_post_meta($post_id, 'rating', $rating);
return array('success' => true, 'id' => $post_id);
}В этом примере создаётся эндпоинт /wp-shablon/v1/reviews/, который принимает POST-запрос с параметрами title, content и rating. Запись создаётся с типом review и статусом ожидания модерации.
Безопасность и аутентификация в REST API WordPress
Очень важно обеспечить безопасность при работе с REST API, особенно если вы позволяете создавать или изменять данные через API. Основные моменты:
- Используйте функции проверки прав доступа (
permission_callback), чтобы ограничить доступ к закрытым эндпоинтам; - Для аутентификации используйте стандартные методы WordPress — cookie, nonce, а для внешних приложений — OAuth, JWT;
- Санитизируйте все входящие данные, не доверяйте клиенту;
- Регулярно обновляйте WordPress и плагины для защиты от уязвимостей.
Для аутентификации с внешних приложений удобно использовать плагин JWT Authentication for WP REST API, который позволяет передавать токен в заголовках запроса.
Пример заголовка с JWT для авторизации
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...После успешной аутентификации пользователь получает токен и может выполнять защищённые операции через API.
Выводы по использованию REST API в WordPress
REST API открывает новые горизонты для разработчиков WordPress, позволяя создавать гибкие и современные решения с разделением фронтенда и бэкенда. Создание собственных эндпоинтов расширяет стандартный функционал и позволяет интегрировать сайт с любыми внешними системами.
В этой статье мы рассмотрели ключевые моменты работы с REST API: от регистрации маршрутов и создания кастомных эндпоинтов до практических примеров с кодом и рекомендаций по безопасности. Используйте полученные знания, чтобы сделать свои проекты на WordPress более мощными и удобными для пользователей.