WordPress с версии 4.7 имеет встроенный REST API, который позволяет взаимодействовать с сайтом через HTTP-запросы. Часто возникает необходимость создать собственные REST API эндпоинты для реализации уникальной бизнес-логики, интеграции с внешними сервисами или для создания SPA-приложений на базе WordPress.
Зачем нужны собственные REST API эндпоинты в WordPress
Стандартные эндпоинты REST API покрывают базовые сущности: посты, страницы, пользователи, таксономии. Но что если нужно реализовать логику, выходящую за рамки CRUD-операций с контентом? Например:
- Обработка сложных форм, требующих валидации и дополнительных действий.
- Интеграция с внешними API, кэширование и агрегация данных.
- Произвольные бизнес-процессы, например, регистрация на событие с проверками.
Для этого создаются кастомные REST API эндпоинты с собственными маршрутами, методами и контроллерами.
Регистрация кастомного REST API эндпоинта
Для регистрации собственного маршрута в REST API используют хук rest_api_init и функцию register_rest_route(). Рассмотрим пример создания эндпоинта /wp-json/wpfinder/v1/custom-operation, который принимает POST-запрос и возвращает результат.
add_action('rest_api_init', function () {
register_rest_route('wpfinder/v1', '/custom-operation', [
'methods' => 'POST',
'callback' => 'wpfinder_custom_operation_callback',
'permission_callback' => function () {
return current_user_can('edit_posts');
}
]);
});
function wpfinder_custom_operation_callback(WP_REST_Request $request) {
$params = $request->get_json_params();
// Пример обработки параметров
if (empty($params['data'])) {
return new WP_Error('no_data', 'Параметр data обязателен', ['status' => 400]);
}
$result = strtoupper($params['data']); // Пример логики
return [
'original' => $params['data'],
'result' => $result
];
}
Здесь мы создали эндпоинт, который принимает JSON с параметром data, преобразует строку в верхний регистр и возвращает результат. При этом доступ ограничен пользователями с правом edit_posts.
Проверка прав доступа и безопасность
Очень важно грамотно реализовать permission_callback. Если необходимо, чтобы эндпоинт был доступен всем, можно вернуть true. Но чаще требуется проверять авторизацию, например, через куки или токены:
- Проверка прав текущего пользователя через функции WordPress.
- Аутентификация через JWT или OAuth, если REST API используется для внешних приложений.
- Дополнительные проверки nonce, если запросы идут с фронтенда.
Безопасность — залог корректной работы и защиты сайта от злоумышленников.
Пример использования плагина для расширения REST API — Clearfy Pro
Плагин Clearfy Pro предлагает инструменты для оптимизации и защиты WordPress, в том числе позволяет упростить работу с REST API, отключать нежелательные эндпоинты и настраивать безопасность. Это особенно полезно при разработке собственных API, чтобы исключить ненужные вызовы и повысить безопасность.
Обработка данных и примеры расширенных операций
Рассмотрим более сложный пример — эндпоинт, который принимает массив ID постов и возвращает для каждого поста заголовок и ссылку:
add_action('rest_api_init', function () {
register_rest_route('wpfinder/v1', '/posts-info', [
'methods' => 'POST',
'callback' => 'wpfinder_posts_info_callback',
'permission_callback' => function () {
return current_user_can('read');
}
]);
});
function wpfinder_posts_info_callback(WP_REST_Request $request) {
$params = $request->get_json_params();
if (empty($params['post_ids']) || !is_array($params['post_ids'])) {
return new WP_Error('invalid_data', 'Параметр post_ids должен быть массивом', ['status' => 400]);
}
$response = [];
foreach ($params['post_ids'] as $post_id) {
$post = get_post($post_id);
if ($post && $post->post_status === 'publish') {
$response[] = [
'id' => $post_id,
'title' => get_the_title($post),
'link' => get_permalink($post)
];
}
}
return $response;
}
Такой эндпоинт удобно использовать для динамического получения информации о постах на фронтенде.
Отладка и тестирование эндпоинтов
Для тестирования своих REST API эндпоинтов удобно использовать инструменты Postman, Insomnia или простые curl-запросы из терминала.
curl -X POST https://example.com/wp-json/wpfinder/v1/custom-operation \
-H "Content-Type: application/json" \
-d '{"data":"тестовая строка"}'
Это позволит быстро проверить работу вашего кода, увидеть ответы и отладить ошибки.
Заключение
Создание выделенных REST API эндпоинтов в WordPress — мощный инструмент для расширения функционала сайта, интеграций и создания современных интерфейсов. Важно внимательно подходить к вопросам безопасности и прав доступа, а также тщательно тестировать свои реализации. Использование готовых плагинов, таких как Clearfy Pro, помогает сделать работу с API более безопасной и удобной.