REST API WordPress — это мощный инструмент, который позволяет взаимодействовать с сайтом на WordPress через HTTP-запросы. С его помощью можно создавать собственные приложения, мобильные клиенты, одностраничные приложения и интеграции с другими сервисами. В этой статье мы подробно разберём, как использовать REST API WordPress для разработки кастомных решений, приведём примеры кода и расскажем, как создавать собственные эндпоинты.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия между клиентом и сервером через стандартные HTTP-методы (GET, POST, PUT, DELETE). В WordPress REST API позволяет работать с основными сущностями сайта (посты, страницы, пользователи, таксономии) и расширять функциональность, создавая свои собственные маршруты и обработчики.
Главные преимущества REST API в WordPress:
- Отделение фронтенда от бэкенда — можно создавать SPA или мобильные приложения, используя WordPress только как backend.
- Упрощение интеграции с внешними сервисами и приложениями.
- Гибкость и расширяемость — можно создавать свои собственные API-маршруты для специфических задач.
Как отправлять запросы к REST API WordPress
Для работы с REST API можно использовать любой HTTP-клиент: браузер, curl, Postman, JavaScript (fetch, axios) и т.д. Базовый формат URL для запросов:
https://ваш-сайт.ru/wp-json/wp/v2/Например, чтобы получить список последних постов, сделаем GET-запрос на https://ваш-сайт.ru/wp-json/wp/v2/posts. Можно добавлять параметры, например, ?per_page=5 для ограничения количества постов.
Пример запроса с помощью JavaScript fetch:
fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=5')
.then(response => response.json())
.then(posts => console.log(posts));Аутентификация и безопасность REST API WordPress
Для чтения публичных данных не требуется аутентификация. Но для создания, редактирования или удаления данных нужна авторизация. В WordPress поддерживаются несколько способов аутентификации для REST API:
- Basic Auth — простой способ, но не рекомендуется для продакшена, так как передаёт логин и пароль в открытом виде.
- OAuth — более сложный, но безопасный метод.
- Application Passwords — встроенный в WordPress способ создания паролей для приложений, удобный и безопасный.
- JWT (JSON Web Token) — популярный способ, требующий установки плагина.
Для примера рассмотрим использование Application Passwords. Их можно создать в профиле пользователя WordPress. После получения пароля, запрос с Basic Auth выглядит так:
curl --user 'username:application_password' -X POST https://ваш-сайт.ru/wp-json/wp/v2/posts -d '{"title":"Заголовок","content":"Содержимое"}' -H 'Content-Type: application/json'Создание собственного REST API эндпоинта в WordPress
Одно из основных преимуществ — возможность расширять API своими маршрутами и методами. Рассмотрим, как создать кастомный эндпоинт, который возвращает список последних отзывов (custom post type 'review').
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
add_action('rest_api_init', function () {
register_rest_route('wpcom/v1', '/reviews', array(
'methods' => 'GET',
'callback' => 'wpcom_get_reviews',
));
});
function wpcom_get_reviews(WP_REST_Request $request) {
$args = array(
'post_type' => 'review',
'posts_per_page' => 5,
);
$query = new WP_Query($args);
$reviews = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$reviews[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'content' => get_the_content(),
);
}
wp_reset_postdata();
}
return $reviews;
}Теперь при запросе GET https://ваш-сайт.ru/wp-json/wpcom/v1/reviews вы получите JSON с последними отзывами.
Добавление параметров в собственный эндпоинт
Можно принимать параметры запроса, например, количество отзывов:
add_action('rest_api_init', function () {
register_rest_route('wpcom/v1', '/reviews', array(
'methods' => 'GET',
'callback' => 'wpcom_get_reviews',
'args' => array(
'count' => array(
'validate_callback' => function($param) {
return is_numeric($param) && $param > 0 && $param <= 20;
},
'default' => 5,
),
),
));
});
function wpcom_get_reviews(WP_REST_Request $request) {
$count = $request->get_param('count');
$args = array(
'post_type' => 'review',
'posts_per_page' => $count,
);
$query = new WP_Query($args);
$reviews = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$reviews[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'content' => get_the_content(),
);
}
wp_reset_postdata();
}
return $reviews;
}Теперь можно запрашивать ?count=10 для получения до 10 записей.
Плагины для работы с REST API WordPress
Существует несколько полезных плагинов, которые упрощают работу с REST API:
- WP REST API Controller — позволяет настраивать доступ к API, управлять правами и видимостью полей без кода.
- JWT Authentication for WP REST API — добавляет поддержку JWT-аутентификации.
- Advanced Custom Fields to REST API — расширяет API для поддержки пользовательских полей ACF.
Использование данных плагинов позволяет быстро и безопасно расширять REST API без глубоких знаний PHP.
Практическое применение REST API WordPress
REST API подходит для множества задач:
- Создание мобильных приложений, которые получают и отправляют контент.
- Интеграция с внешними сервисами, например, CRM, маркетинговыми платформами.
- Разработка кастомных фронтендов на React, Vue или Angular с бэкендом на WordPress.
- Автоматизация публикации и обновления контента с помощью внешних скриптов.
Рассмотрим пример использования fetch в React для получения постов:
import React, { useEffect, useState } from 'react';
function WpcomPosts() {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=5')
.then(res => res.json())
.then(data => setPosts(data));
}, []);
return (
<div>
<h2>Последние посты</h2>
<ul>
{posts.map(post => (
<li key={post.id}>
<h3 dangerouslySetInnerHTML={{ __html: post.title.rendered }}></h3>
<div dangerouslySetInnerHTML={{ __html: post.excerpt.rendered }}></div>
</li>
))}
</ul>
</div>
);
}
export default WpcomPosts;Отладка и тестирование REST API WordPress
Для удобства разработки используйте инструменты:
- Postman — мощный клиент для тестирования API-запросов.
- WP-CLI — позволяет работать с REST API из командной строки.
- Логирование и обработка ошибок — используйте в своих функциях
WP_Errorдля возвращения ошибок и проверяйте их на клиенте.
Пример возврата ошибки в кастомном эндпоинте:
if (empty($reviews)) {
return new WP_Error('no_reviews', 'Отзывы не найдены', array('status' => 404));
}