REST API WordPress — мощный инструмент, который позволяет взаимодействовать с вашим сайтом извне, создавая кастомные приложения или интеграции. В этой статье мы подробно рассмотрим, как зарегистрировать собственные REST API маршруты, обрабатывать запросы и возвращать данные, а также разберём полезные практические примеры и нюансы безопасности.
Что такое REST API в WordPress и для чего он нужен
REST API — это интерфейс, который позволяет сторонним приложениям (например, мобильным, SPA или внешним сервисам) обращаться к вашему сайту через HTTP-запросы и получать данные в формате JSON. WordPress с версии 4.7 поставляется с встроенным REST API, который покрывает стандартные возможности: посты, страницы, комментарии, таксономии и пользователей.
Но кроме стандартного функционала, REST API позволяет создавать собственные маршруты с кастомной логикой. Это особенно полезно, когда нужно реализовать уникальные сценарии: например, получать данные кастомных типов записей, выполнять сложные выборки, создавать кастомные действия.
Использование REST API даёт гибкость и расширяет возможности вашего WordPress-сайта, позволяя строить современные интерфейсы и приложения.
Как зарегистрировать собственный маршрут REST API в WordPress
Для регистрации собственного маршрута используется функция register_rest_route(). Обычно регистрацию делают в хука rest_api_init. Рассмотрим пример, который создаёт маршрут /wpfaq/v1/data и возвращает простой массив с сообщением.
add_action('rest_api_init', 'wpfaq_register_custom_route');
function wpfaq_register_custom_route() {
register_rest_route('wpfaq/v1', '/data', array(
'methods' => 'GET',
'callback' => 'wpfaq_custom_route_callback',
'permission_callback' => '__return_true',
));
}
function wpfaq_custom_route_callback(WP_REST_Request $request) {
return array(
'message' => 'Привет из WPFAQ REST API!'
);
}В этом примере:
wpfaq/v1— пространство имён и версия API;/data— конечная точка маршрута;methods— HTTP метод (GET);callback— функция, которая обрабатывает запрос и возвращает данные;permission_callback— функция проверки прав, здесь разрешаем всем.
После добавления этого кода можно отправить запрос на https://ваш-сайт/wp-json/wpfaq/v1/data и получить JSON с сообщением.
Обработка параметров запроса
Часто нужен приём параметров, например, чтобы выбирать данные по ID или фильтровать результаты. В REST API параметры передаются через URL или тело запроса.
add_action('rest_api_init', 'wpfaq_register_post_route');
function wpfaq_register_post_route() {
register_rest_route('wpfaq/v1', '/post/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'wpfaq_get_post_by_id',
'permission_callback' => '__return_true',
'args' => array(
'id' => array(
'validate_callback' => 'is_numeric',
),
),
));
}
function wpfaq_get_post_by_id(WP_REST_Request $request) {
$id = (int) $request->get_param('id');
$post = get_post($id);
if (!$post) {
return new WP_Error('no_post', 'Пост не найден', array('status' => 404));
}
return array(
'ID' => $post->ID,
'title' => $post->post_title,
'content' => $post->post_content,
);
}Здесь мы создаём маршрут, который принимает параметр id, проверяет его валидность и возвращает информацию о посте. Если пост не найден, возвращается ошибка с кодом 404.
Безопасность и авторизация в кастомных REST маршрутах
При создании REST API важно учитывать безопасность. Не все данные должны быть доступны всем, особенно если речь идёт о приватной информации или действиях с изменением данных.
По умолчанию параметр permission_callback отвечает за проверку прав. Вместо __return_true можно использовать проверку авторизации и ролей. Например, разрешить доступ только авторизованным пользователям:
function wpfaq_permission_check() {
return is_user_logged_in();
}И в маршруте заменить 'permission_callback' => '__return_true' на 'permission_callback' => 'wpfaq_permission_check'.
Для более сложных сценариев можно проверять права по ролям, nonce, ключам API и т.д.
Пример создания записи через REST API с авторизацией
Создадим маршрут, который позволяет создавать посты типа «post» через метод POST. Для безопасности проверим, что пользователь авторизован и имеет право создавать записи.
add_action('rest_api_init', 'wpfaq_register_create_post_route');
function wpfaq_register_create_post_route() {
register_rest_route('wpfaq/v1', '/create-post', array(
'methods' => 'POST',
'callback' => 'wpfaq_create_post',
'permission_callback' => function() {
return current_user_can('publish_posts');
},
'args' => array(
'title' => array('required' => true),
'content' => array('required' => true),
),
));
}
function wpfaq_create_post(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = sanitize_textarea_field($request->get_param('content'));
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'post',
));
if (is_wp_error($post_id)) {
return new WP_Error('create_failed', 'Ошибка создания поста', array('status' => 500));
}
return array('post_id' => $post_id, 'message' => 'Пост успешно создан');
}Теперь авторизованный пользователь с правами на публикацию сможет создать пост, отправив POST-запрос с параметрами title и content.
Использование популярных плагинов для расширения REST API
Иногда базовых возможностей REST API недостаточно. Для расширения функционала полезно использовать плагины:
- WP REST API Controller — позволяет управлять видимостью полей и типов записей в API без кода;
- ACF to REST API — добавляет поля Advanced Custom Fields в REST API;
- JWT Authentication for WP REST API — реализует авторизацию через JWT-токены для безопасного доступа;
- Clearfy Pro — оптимизирует и настраивает REST API, отключая лишние эндпоинты и улучшая безопасность.
Например, если вы используете ACF для кастомных полей, плагин ACF to REST API позволит легко получить эти поля через API без дополнительного кода.
Практические советы и рекомендации по работе с REST API WordPress
Кэширование ответов
REST API может создавать дополнительную нагрузку на сервер при частых запросах. Для оптимизации стоит использовать кэширование ответов на уровне сервера или плагинов кэширования. Это снижает нагрузку и ускоряет отклик.
Логирование и отладка
Для отладки запросов удобно использовать инструменты как Postman или curl. В коде можно логировать запросы и ошибки в файл через error_log() или специализированные библиотеки.
Версионирование API
Всегда используйте версионность (например, wpfaq/v1) в namespace, чтобы при изменении структуры API не ломать существующие клиенты.
Работа с нестандартными типами постов
Если у вас есть кастомные типы постов, убедитесь, что они зарегистрированы с параметром show_in_rest => true, чтобы они были доступны через стандартные маршруты REST API:
register_post_type('my_type', array(
'label' => 'Мой тип',
'public' => true,
'show_in_rest' => true,
));Выводы
REST API WordPress — отличный инструмент для интеграции и создания собственных приложений на базе вашего сайта. Правильная регистрация маршрутов, обработка параметров, обеспечение безопасности и использование плагинов расширяют возможности и упрощают разработку. Следуя рекомендациям из этой статьи, вы сможете создавать мощные и безопасные REST API решения под любые задачи.