WordPress с версии 4.7 имеет встроенный REST API, который позволяет создавать и расширять API для взаимодействия с сайтом. Однако часто возникает необходимость создать собственный endpoint, который будет отдавать специфические данные или выполнять кастомную логику. В этой статье мы подробно разберём, как правильно создать собственный REST API endpoint в WordPress с примерами кода и рекомендациями.
Что такое REST API endpoint в WordPress и зачем он нужен
REST API endpoint — это URL, по которому можно получить доступ к определённым данным или функциям сайта через HTTP-запросы. WordPress уже предоставляет стандартные endpoints для работы с записями, пользователями, комментариями и т.д. Но если вам нужно получить специфические данные, например, кастомные поля, сложные выборки или интеграции с внешними сервисами — собственный endpoint станет решением.
Создание собственного endpoint позволяет:
- Обеспечить удобный и безопасный доступ к данным сайта для фронтенд-приложений — React, Vue, мобильных приложений.
- Реализовать кастомные бизнес-логики, которые нельзя покрыть стандартными методами API.
- Упростить интеграцию с внешними сервисами, которые требуют специфического формата данных.
Создание собственного REST API endpoint: основные шаги
Для создания собственного endpoint в WordPress используется функция register_rest_route(). Вы регистрируете новый маршрут, указываете метод запроса (GET, POST и др.), а также callback-функцию, которая будет обрабатывать запросы.
Пример базовой регистрации endpoint:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/custom-data', array(
'methods' => 'GET',
'callback' => 'wponline_get_custom_data',
'permission_callback' => '__return_true', // на время можно отключить проверку прав
));
});
function wponline_get_custom_data(WP_REST_Request $request) {
return [
'message' => 'Это пример собственного REST API endpoint в WordPress',
'data' => [1, 2, 3]
];
}В этом примере мы создали endpoint по адресу /wp-json/wponline/v1/custom-data, который возвращает простой массив данных.
Объяснение параметров register_rest_route
- namespace — обычно указывается уникальный префикс для группировки endpoints, например,
wponline/v1. - route — путь внутри namespace, здесь
/custom-data. - methods — HTTP-методы, которые будут обрабатываться (GET, POST, PUT, DELETE).
- callback — имя функции для обработки запроса.
- permission_callback — функция проверки авторизации и прав доступа.
Добавление параметров запроса и их обработка
Часто нужно принимать параметры из URL или тела запроса. В WordPress REST API это реализуется через объект WP_REST_Request. Пример с параметром:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/product/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'wponline_get_product_by_id',
'permission_callback' => '__return_true',
));
});
function wponline_get_product_by_id(WP_REST_Request $request) {
$id = $request->get_param('id');
$product = get_post($id);
if (!$product || $product->post_type !== 'product') {
return new WP_Error('no_product', 'Продукт не найден', array('status' => 404));
}
return [
'id' => $product->ID,
'title' => $product->post_title,
'content' => $product->post_content
];
}В этом примере endpoint принимает числовой параметр id из URL, получает данные записи product и возвращает их в формате JSON. Если продукт не найден, возвращается ошибка с кодом 404.
Регистрация параметров и валидация
Можно добавить валидацию параметров с помощью аргумента args:
register_rest_route('wponline/v1', '/search', array(
'methods' => 'GET',
'callback' => 'wponline_search_posts',
'args' => array(
'term' => array(
'required' => true,
'validate_callback' => function($param) {
return is_string($param) && strlen($param) > 2;
}
)
),
'permission_callback' => '__return_true',
));Это позволит не запускать обработчик, если параметр term не передан или слишком короткий.
Реализация POST-запроса для создания записи
REST API позволяет не только получать данные, но и создавать, обновлять и удалять записи. Ниже пример создания записи через POST-запрос:
add_action('rest_api_init', function () {
register_rest_route('wponline/v1', '/create-post', array(
'methods' => 'POST',
'callback' => 'wponline_create_post',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => array(
'title' => array('required' => true),
'content' => array('required' => true),
),
));
});
function wponline_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' => 'draft',
'post_type' => 'post',
));
if (is_wp_error($post_id)) {
return $post_id;
}
return ['post_id' => $post_id, 'message' => 'Запись успешно создана'];
}Обратите внимание на проверку прав через permission_callback. В данном случае только пользователи с правом edit_posts смогут создавать записи.
Использование плагина Clearfy Pro для расширения REST API
Если вам нужна дополнительная гибкость и инструменты для работы с REST API, стоит обратить внимание на плагин Clearfy Pro. Он помогает оптимизировать работу API, добавляет возможности управления доступом и безопасности.
Например, Clearfy Pro позволяет легко отключать ненужные endpoints, что повышает безопасность сайта. Также он может помочь с настройкой CORS и кешированием ответов API.
Полезные советы по безопасности и производительности
Проверка прав доступа
Обязательно реализуйте permission_callback, чтобы ограничить доступ к чувствительным данным. Например, можно проверять авторизацию пользователя или использовать nonce.
Кэширование ответов
Если ваш endpoint возвращает данные, которые не меняются часто, стоит реализовать кэширование — с помощью Transients API или внешних систем кеширования. Это снизит нагрузку на сервер и ускорит отклик.
Обработка ошибок
Используйте класс WP_Error для возврата ошибок и информативных сообщений клиенту. Это поможет отлаживать приложения и информировать пользователя о проблемах.
Как тестировать собственный REST API endpoint
Для тестирования можно использовать инструменты:
- Postman — удобный GUI клиент для отправки HTTP-запросов.
- curl — команда в терминале, например:
curl -X GET https://example.com/wp-json/wponline/v1/custom-data - Встроенный браузер — для GET-запросов достаточно перейти по URL.
При тестах проверяйте статусы HTTP-ответов, структуру данных и корректность обработки ошибок.
Итоги
Создание собственного REST API endpoint в WordPress — мощный инструмент для расширения функционала сайта и интеграции с внешними системами. Используя register_rest_route(), правильную обработку параметров, проверку прав и обработку ошибок, вы сможете создавать надёжные и быстрые API. Дополнительно стоит обратить внимание на оптимизацию и безопасность с помощью плагинов, например, Clearfy Pro.