Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с сайтом на WordPress через HTTP-запросы. Он позволяет получать, создавать, обновлять и удалять данные сайта программно, что открывает большие возможности для создания мобильных приложений, SPA (Single Page Applications), интеграций с внешними сервисами и кастомных админ-панелей.
В WordPress REST API встроен с версии 4.7, и предоставляет стандартные маршруты для работы с записями, страницами, пользователями и таксономиями. Однако возможностей стандартных эндпоинтов иногда недостаточно, поэтому часто нужно создавать свои REST API маршруты и методы.
Работая с REST API, вы избавляетесь от необходимости напрямую работать с базой данных и сложными PHP-функциями. Все взаимодействие происходит через понятные HTTP-запросы с JSON-ответами.
Основные возможности WordPress REST API
WordPress REST API позволяет:
- Получать список записей, страниц, категорий, пользователей и других типов данных.
- Создавать, обновлять и удалять записи и другие объекты (с учетом прав доступа).
- Фильтровать и сортировать данные через параметры запроса.
- Расширять API своими собственными маршрутами и методами.
- Интегрировать WordPress с внешними приложениями и сервисами.
Рассмотрим работу с API на практике.
Пример использования стандартных эндпоинтов REST API
Для получения списка последних 10 записей блога можно отправить GET-запрос на URL:
https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=10Ответ будет JSON-массивом с объектами записей, включая заголовок, содержание, дату и другие поля. Этот запрос можно выполнить через fetch в JavaScript или через curl в терминале.
Пример запроса на JavaScript:
fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=10')
.then(response => response.json())
.then(data => console.log(data));Так же можно получить отдельную запись по ID, например, запись с ID 123:
GET https://ваш-сайт.ru/wp-json/wp/v2/posts/123Регистрация собственного REST API эндпоинта в WordPress
Иногда стандартных маршрутов недостаточно, и нужно добавить свои собственные. Например, создадим эндпоинт для получения списка популярных статей по просмотрам (предположим, что у вас есть метаполе с количеством просмотров).
Добавим в functions.php или в свой плагин следующий код:
add_action('rest_api_init', function () {
register_rest_route('wp-puzzle/v1', '/popular-posts', array(
'methods' => 'GET',
'callback' => 'wp_puzzle_get_popular_posts',
'permission_callback' => '__return_true', // доступ открыт всем
));
});
function wp_puzzle_get_popular_posts(WP_REST_Request $request) {
$args = array(
'post_type' => 'post',
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page' => 5,
);
$query = new WP_Query($args);
$posts = array();
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'views' => get_post_meta(get_the_ID(), 'post_views_count', true),
'link' => get_permalink(),
);
}
wp_reset_postdata();
return $posts;
}Теперь, отправив GET-запрос на https://ваш-сайт.ru/wp-json/wp-puzzle/v1/popular-posts, вы получите JSON с 5 популярными постами.
Аутентификация и безопасность REST API
Для операций, изменяющих данные (POST, PUT, DELETE), нужна аутентификация. WordPress поддерживает несколько способов:
- Куки авторизации, если запрос идет из админки или авторизованного пользователя.
- Basic Auth — простой, но небезопасный способ, подходит для тестирования.
- OAuth 1.0a — более сложный, но надежный способ.
- JWT (JSON Web Token) — современный и удобный метод, который можно добавить через плагины.
Для примера настройки JWT можно использовать плагин JWT Authentication for WP REST API. После настройки вы сможете получать токен и передавать его в заголовке Authorization для защищенных запросов.
Пример запроса с аутентификацией и созданием записи
Предположим, вы получили JWT токен и хотите создать новую запись через REST API. Пример curl-запроса:
curl -X POST https://ваш-сайт.ru/wp-json/wp/v2/posts \
-H "Authorization: Bearer ВАШ_ТОКЕН" \
-H "Content-Type: application/json" \
-d '{"title":"Новая статья через API","content":"Содержание статьи","status":"publish"}'Если токен валиден и у пользователя есть права на создание записей, запись будет создана и вернется JSON с данными новой записи.
Рекомендации по безопасности
Никогда не передавайте токены в открытом виде по незащищенным каналам. Используйте HTTPS. Ограничивайте права пользователей, которые работают с API, чтобы минимизировать риски.
Полезные плагины для работы с REST API
1. WP REST API Controller — позволяет удобно настраивать какие поля и типы записей доступны в API, без кода.
2. JWT Authentication for WP REST API — для добавления поддержки JWT аутентификации.
3. Advanced Custom Fields (ACF) + ACF to REST API — для работы с пользовательскими полями через API.
4. REST API Toolbox — расширяет возможности API, добавляя фильтры и другие полезные функции.
Практические советы и типичные ошибки
Работая с REST API, часто сталкиваешься с проблемами доступа и формата данных. Вот несколько советов:
- Проверяйте права доступа в
permission_callback, чтобы не открывать конфиденциальные данные. - Проверяйте, что ваши кастомные поля возвращаются в ответах, если используете ACF, подключайте соответствующие расширения.
- Для сложных запросов используйте параметры фильтрации, сортировки и пагинации.
- Тестируйте API через Postman или curl перед внедрением в код.
- Документируйте свои собственные маршруты и методы, чтобы не запутаться в будущем.
Заключение по работе с WordPress REST API
REST API — мощный инструмент для расширения возможностей WordPress и интеграции с внешними сервисами. Он позволяет отделить фронтенд от бэкенда и создавать современные интерфейсы и приложения. Используя стандартные и кастомные маршруты, а также грамотную аутентификацию, вы сможете создавать надежные и гибкие решения.
Начинайте с изучения стандартных эндпоинтов, затем переходите к созданию своих, учитывайте безопасность и используйте сторонние плагины для ускорения разработки. Практика и тщательное тестирование помогут быстро освоить REST API и сделать ваш сайт еще удобнее и функциональнее.