WordPress с версии 4.7 имеет встроенный REST API, который позволяет создавать, читать, обновлять и удалять данные сайта через HTTP-запросы. Это мощный инструмент для разработчиков, позволяющий интегрировать WordPress с внешними системами, мобильными приложениями и фронтенд-фреймворками.
Что такое REST API endpoint в WordPress
REST API endpoint — это URL-адрес, по которому доступен определённый ресурс или функция вашего сайта через REST-запросы. WordPress по умолчанию предоставляет множество стандартных endpoint-ов: для постов, пользователей, таксономий и прочих сущностей.
Однако часто возникает потребность создать свой, кастомный endpoint для специфичных задач, например, предоставлять данные из уникальных таблиц в базе данных или выполнять кастомную логику.
Регистрация собственного REST API endpoint в WordPress
Для создания собственного endpoint необходимо зарегистрировать маршрут и обработчик в хуке rest_api_init. Ниже пример базового кода, который регистрирует endpoint /wpupgrade/v1/message, возвращающий простой JSON с сообщением.
add_action('rest_api_init', function () {
register_rest_route('wpupgrade/v1', '/message', [
'methods' => 'GET',
'callback' => 'wpupgrade_rest_api_message_handler',
]);
});
function wpupgrade_rest_api_message_handler(WP_REST_Request $request) {
return [
'message' => 'Привет, это кастомный REST API endpoint от wpupgrade.ru!'
];
}После добавления этого кода в файл functions.php вашей темы или в плагин, вы сможете обратиться по адресу https://ваш-сайт.ru/wp-json/wpupgrade/v1/message и получить ответ в формате JSON.
Обработка параметров запроса в REST API endpoint
Часто требуется принимать параметры от клиента, например, ID записи или фильтры. В REST API это делается через объект WP_REST_Request, который передаётся в функцию-обработчик.
Вот пример endpoint-а, который принимает параметр name и возвращает персонализированное приветствие:
add_action('rest_api_init', function () {
register_rest_route('wpupgrade/v1', '/greet', [
'methods' => 'GET',
'callback' => 'wpupgrade_rest_api_greet_handler',
'args' => [
'name' => [
'required' => true,
'validate_callback' => function($param) {
return is_string($param) && !empty($param);
}
]
]
]);
});
function wpupgrade_rest_api_greet_handler(WP_REST_Request $request) {
$name = sanitize_text_field($request->get_param('name'));
return [
'greeting' => "Привет, {$name}! Добро пожаловать на wpupgrade.ru"
];
}Теперь запрос https://ваш-сайт.ru/wp-json/wpupgrade/v1/greet?name=Андрей вернёт:
{
"greeting": "Привет, Андрей! Добро пожаловать на wpupgrade.ru"
}Обработка POST-запросов и сохранение данных
REST API позволяет обрабатывать не только GET, но и POST, PUT, DELETE запросы. Это полезно для создания кастомных форм, сохранения настроек и прочего.
Пример endpoint-а, который принимает POST-запрос с параметром feedback и сохраняет его в опцию WordPress:
add_action('rest_api_init', function () {
register_rest_route('wpupgrade/v1', '/feedback', [
'methods' => 'POST',
'callback' => 'wpupgrade_rest_api_feedback_handler',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => [
'feedback' => [
'required' => true,
'sanitize_callback' => 'sanitize_textarea_field',
],
],
]);
});
function wpupgrade_rest_api_feedback_handler(WP_REST_Request $request) {
$feedback = $request->get_param('feedback');
// Допустим, сохраняем в опцию
update_option('wpupgrade_feedback', $feedback);
return [
'status' => 'success',
'message' => 'Спасибо за ваш отзыв!'
];
}Обратите внимание на permission_callback, который проверяет права пользователя, чтобы предотвратить неавторизованный доступ.
Обеспечение безопасности и валидация данных
При создании собственных endpoint-ов важно учитывать безопасность и валидировать входящие данные, чтобы избежать уязвимостей типа SQL-инъекций, XSS и прочих.
Основные рекомендации:
- Используйте встроенные функции санитизации:
sanitize_text_field,sanitize_email,sanitize_textarea_fieldи т.д. - Проверяйте права доступа через
permission_callback. - Валидация параметров через опцию
argsпри регистрации маршрута.
Полезные плагины для работы с REST API в WordPress
Если вы хотите расширить возможности REST API без написания кода, обратите внимание на следующие плагины:
- WP REST API Controller — позволяет управлять доступом к стандартным endpoint-ам и создавать новые через интерфейс.
- Advanced Custom Fields (ACF) to REST API — добавляет поля ACF в ответы REST API.
- JWT Authentication for WP REST API — добавляет поддержку JWT-токенов для авторизации в REST API, что важно для безопасности при работе с внешними приложениями.
Пример реального использования кастомного REST API endpoint
Представьте, что вы создаёте мобильное приложение, которое должно получать список последних отзывов с сайта. Вы можете создать endpoint, который будет возвращать отзывы из кастомной таблицы или типа записи.
Пример регистрации endpoint-а:
add_action('rest_api_init', function () {
register_rest_route('wpupgrade/v1', '/reviews', [
'methods' => 'GET',
'callback' => 'wpupgrade_rest_api_get_reviews',
]);
});
function wpupgrade_rest_api_get_reviews() {
$args = [
'post_type' => 'review',
'post_status' => 'publish',
'numberposts' => 10,
];
$reviews = get_posts($args);
$data = [];
foreach ($reviews as $review) {
$data[] = [
'id' => $review->ID,
'title' => get_the_title($review->ID),
'content' => get_the_content(null, false, $review->ID),
'date' => get_the_date('', $review->ID),
];
}
return $data;
}Этот endpoint вернёт JSON-массив с последними 10 отзывами, которые можно использовать в приложении или на другом сайте.
Заключение
Создание собственных REST API endpoint-ов в WordPress — это отличный способ расширить функциональность сайта, интегрироваться с внешними системами и создавать современные приложения. Важно следовать рекомендациям по безопасности, валидации и использовать возможности WordPress для упрощения разработки.