WP REST API значительно расширяет возможности WordPress, позволяя создавать современные и гибкие решения для взаимодействия с сайтом через HTTP-запросы. В этой статье мы подробно рассмотрим, как использовать WP REST API для создания простого плагина, который предоставляет собственный REST-эндпоинт. Разберёмся с регистрацией маршрутов, обработкой запросов, безопасностью и примерами кода.
Что такое WP REST API и зачем использовать его в плагинах WordPress
WP REST API — это интерфейс обмена данными, позволяющий отправлять и получать данные с сайта через HTTP-запросы в формате JSON. Это открывает двери для создания SPA (Single Page Applications), мобильных приложений и интеграций с внешними сервисами.
Использование REST API в плагинах позволяет:
- Создавать собственные маршруты с нужным функционалом.
- Обеспечивать взаимодействие с данными сайта из внешних приложений.
- Облегчать разработку и расширение функционала без необходимости напрямую вмешиваться в шаблоны.
Полезно понимать, что WP REST API интегрирован в ядро WordPress начиная с версии 4.7, поэтому никаких дополнительных библиотек устанавливать не нужно.
Регистрация собственного REST API маршрута в плагине
Для начала создадим простой плагин, который регистрирует свой REST API маршрут и возвращает список последних 5 записей.
Создайте файл wptemp-simple-rest.php в папке wp-content/plugins/wptemp-simple-rest с таким содержимым:
<?php
/**
* Plugin Name: WPTEMP Simple REST API
* Description: Пример плагина с собственным REST API эндпоинтом
* Version: 1.0
* Author: WPTEMP
*/
add_action('rest_api_init', 'wptemp_restapi_register_routes');
function wptemp_restapi_register_routes() {
register_rest_route('wptemp/v1', '/latest-posts', [
'methods' => 'GET',
'callback' => 'wptemp_restapi_get_latest_posts',
'permission_callback' => '__return_true', // Открытый маршрут
]);
}
function wptemp_restapi_get_latest_posts() {
$args = [
'numberposts' => 5,
'post_status' => 'publish',
];
$posts = get_posts($args);
$data = [];
foreach ($posts as $post) {
$data[] = [
'id' => $post->ID,
'title' => get_the_title($post->ID),
'link' => get_permalink($post->ID),
];
}
return rest_ensure_response($data);
}Здесь мы регистрируем маршрут /wp-json/wptemp/v1/latest-posts, который возвращает JSON с последними пятью опубликованными постами. Параметр permission_callback установлен в __return_true, чтобы сделать маршрут публичным. В продакшене нужно подумать о безопасности.
Обработка POST-запросов и проверка прав доступа
Часто нужно не только получать данные, но и принимать их. Добавим маршрут для создания записи через POST-запрос.
add_action('rest_api_init', function () {
register_rest_route('wptemp/v1', '/create-post', [
'methods' => 'POST',
'callback' => 'wptemp_restapi_create_post',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => [
'title' => [
'required' => true,
'sanitize_callback' => 'sanitize_text_field',
],
'content' => [
'required' => true,
'sanitize_callback' => 'wp_kses_post',
],
],
]);
});
function wptemp_restapi_create_post(WP_REST_Request $request) {
$title = $request->get_param('title');
$content = $request->get_param('content');
$post_id = wp_insert_post([
'post_title' => $title,
'post_content' => $content,
'post_status' => 'pending', // Можно менять на publish
'post_type' => 'post',
]);
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Ошибка при создании записи', ['status' => 500]);
}
return rest_ensure_response(['post_id' => $post_id, 'message' => 'Запись успешно создана']);
}Здесь мы проверяем, что пользователь имеет право редактировать записи (edit_posts), иначе запрос вернёт 403 ошибку. Также используем sanitize_callback для безопасности данных.
Использование плагина Clearfy Pro для оптимизации REST API
Если вы используете Clearfy Pro, он позволяет гибко управлять доступностью REST API, отключать ненужные маршруты и оптимизировать безопасность.
Например, можно отключить REST API для неавторизованных пользователей, чтобы закрыть сайт от посторонних запросов, оставив при этом доступ к своим пользовательским маршрутам.
Практические советы по безопасности REST API в плагинах
Несмотря на удобство, REST API может стать точкой входа для злоумышленников. Вот несколько рекомендаций:
- Используйте
permission_callbackдля проверки прав доступа к каждому маршруту. - Обязательно валидируйте и фильтруйте все входящие данные.
- При необходимости используйте nonce или OAuth для аутентификации.
- Минимизируйте публичные маршруты, которые возвращают чувствительные данные.
- Логируйте подозрительную активность REST API запросов.
Отладка и тестирование REST API маршрутов
Для тестирования своих маршрутов удобно использовать инструменты, такие как:
- Postman — мощный клиент для отправки HTTP-запросов.
- cURL — командная утилита в терминале.
- Browser REST clients — расширения для браузера.
Например, запрос последних постов можно сделать так:
curl https://ваш-сайт.ru/wp-json/wptemp/v1/latest-postsДля POST-запроса с созданием записи:
curl -X POST https://ваш-сайт.ru/wp-json/wptemp/v1/create-post \
-H 'Content-Type: application/json' \
-d '{"title":"Тестовый заголовок","content":"Содержимое записи"}' \
-u user:passwordГде user:password — данные авторизации пользователя с правами на редактирование.
Выводы и возможности расширения
Использование WP REST API в плагинах — мощный инструмент для разработки современных решений на WordPress. Вы можете создавать свои собственные маршруты, расширять функционал, интегрировать внешние сервисы и строить SPA-приложения.
Далее можно усложнить плагин, добавив поддержку пользовательских типов записей, метаданных, фильтров и пагинации, а также использовать встроенные возможности WP-CLI для автоматизации.
Для тех, кто хочет упростить работу с REST API, рекомендую ознакомиться с плагином WPRemark — он помогает создавать красивые отзывы через REST API и выводить их на сайт с минимальными усилиями.