REST API в WordPress — мощный инструмент, который позволяет создавать гибкие и расширяемые интерфейсы для взаимодействия с сайтом. В этой статье подробно разберём, как создавать собственные REST API эндпоинты, чтобы получать, добавлять, обновлять или удалять данные на сайте программно. Это особенно полезно для разработчиков, которые хотят интегрировать WordPress с внешними приложениями, мобильными клиентами или создавать кастомные административные панели.
Что такое REST API в WordPress и зачем создавать кастомные эндпоинты
В WordPress с версии 4.7 встроена поддержка REST API — набора стандартных URL, которые позволяют работать с контентом сайта через HTTP-запросы. По умолчанию доступны эндпоинты для постов, пользователей, таксономий и других базовых сущностей. Однако стандартных возможностей не всегда хватает, особенно если нужно работать с кастомными типами записей, сложной логикой или специфичными бизнес-процессами.
Создание кастомных эндпоинтов позволяет расширить функциональность сайта и реализовать задачи, которые не поддерживаются из коробки. Например, можно сделать API для обработки заказов, регистрации пользователей, получения статистики или интеграции с внешними сервисами.
Важный момент — кастомные эндпоинты можно защитить и настраивать права доступа, что делает их безопасными для использования в реальных проектах.
Регистрация кастомного REST API эндпоинта в WordPress
Для создания собственного эндпоинта в WordPress используется функция register_rest_route, которую нужно вызывать в хуке rest_api_init. Рассмотрим пример на wpacademy.ru, где мы создадим эндпоинт для получения списка популярных статей.
add_action('rest_api_init', 'wpacademy_register_popular_posts_endpoint');
function wpacademy_register_popular_posts_endpoint() {
register_rest_route('wpacademy/v1', '/popular-posts/', array(
'methods' => 'GET',
'callback' => 'wpacademy_get_popular_posts',
'permission_callback' => '__return_true',
));
}
function wpacademy_get_popular_posts() {
$args = array(
'posts_per_page' => 5,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'post_status' => 'publish',
);
$query = new WP_Query($args);
$posts = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'link' => get_permalink(),
'views' => (int) get_post_meta(get_the_ID(), 'post_views_count', true),
);
}
wp_reset_postdata();
}
return $posts;
}
В этом примере мы регистрируем маршрут /wp-json/wpacademy/v1/popular-posts/, который возвращает 5 самых просматриваемых постов, используя метаполе post_views_count. Обратите внимание, что для простоты разрешение доступа указано как __return_true, но в реальном проекте нужно продумать проверку прав.
Разбор параметров функции register_rest_route
Первый аргумент — пространство имён, чтобы избежать конфликтов (здесь wpacademy/v1). Второй — путь эндпоинта. Третий — массив с параметрами:
- methods — HTTP-методы (GET, POST, PUT, DELETE и др.).
- callback — функция, которая обрабатывает запрос и возвращает данные.
- permission_callback — функция проверки прав доступа.
Можно добавить дополнительные параметры, например, валидацию входных данных, описание аргументов и пр.
Как обрабатывать POST-запросы и принимать данные в теле запроса
Создадим пример эндпоинта, который принимает данные через POST-запрос и создаёт новую запись типа «отзыв».
add_action('rest_api_init', 'wpacademy_register_create_review_endpoint');
function wpacademy_register_create_review_endpoint() {
register_rest_route('wpacademy/v1', '/create-review/', array(
'methods' => 'POST',
'callback' => 'wpacademy_create_review',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => array(
'title' => array(
'required' => true,
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field',
),
'content' => array(
'required' => true,
'type' => 'string',
'sanitize_callback' => 'sanitize_textarea_field',
),
'rating' => array(
'required' => true,
'type' => 'integer',
'validate_callback' => function($param, $request, $key) {
return $param >= 1 && $param <= 5;
},
),
),
));
}
function wpacademy_create_review($request) {
$params = $request->get_params();
$post_id = wp_insert_post(array(
'post_title' => $params['title'],
'post_content' => $params['content'],
'post_type' => 'review',
'post_status' => 'pending',
));
if (is_wp_error($post_id)) {
return new WP_Error('cannot_create', 'Не удалось создать отзыв', array('status' => 500));
}
update_post_meta($post_id, 'rating', $params['rating']);
return array('success' => true, 'review_id' => $post_id);
}
Здесь мы определяем обязательные аргументы с валидацией и санитаризацией, проверяем права пользователя и создаём запись с типом review. Такой подход помогает безопасно принимать пользовательские данные через REST API.
Советы по безопасности и оптимизации кастомных эндпоинтов
При создании кастомных API важно не только реализовать логику, но и обеспечить безопасность и производительность:
- Проверяйте права доступа — используйте
permission_callbackдля ограничения доступа по ролям и возможностям. - Санитизируйте и валидируйте данные — не доверяйте входящим параметрам, используйте встроенные функции WordPress.
- Кешируйте ответы — если данные не меняются часто, используйте transient API или внешнее кеширование.
- Обрабатывайте ошибки корректно — возвращайте понятные сообщения и HTTP-коды.
- Логируйте важные события — для отладки и мониторинга.
Также стоит учитывать нагрузку на сервер — сложные запросы и тяжелая логика могут замедлять сайт.
Полезные плагины для работы с REST API в WordPress
Для упрощения разработки и тестирования REST API можно использовать следующие плагины:
- WP REST API Controller — позволяет управлять доступом к стандартным и кастомным эндпоинтам через админку.
- REST API Helper — добавляет инструменты для отладки и расширения API.
- Advanced Custom Fields (ACF) — с дополнением ACF to REST API легко выводить кастомные поля в ответах.
- Postman или Insomnia — внешние инструменты для тестирования API-запросов.
Использование этих инструментов поможет быстрее внедрять и отлаживать свои REST API решения.
Выводы и рекомендации по созданию кастомных REST API эндпоинтов в WordPress
Кастомные эндпоинты REST API открывают большие возможности для разработки на WordPress. Они позволяют создавать интеграции, мобильные приложения и сложные интерфейсы, используя стандартные веб-технологии.
Главное — грамотно проектировать структуру API, обеспечивать безопасность и оптимизировать производительность. Приведённые примеры с кодом на wpacademy.ru помогут быстро начать создавать свои решения и расширять функциональность сайтов на WordPress.