Современные сайты на WordPress все чаще требуют интеграции с внешними сервисами, мобильными приложениями или одностраничными приложениями (SPA). Для этого идеально подходит встроенный в WordPress REST API, который позволяет создавать, читать, обновлять и удалять данные через HTTP-запросы. В этой статье мы подробно рассмотрим, как использовать REST API в WordPress для создания собственных функций, расширяющих возможности сайта.
Что такое REST API в WordPress и зачем он нужен
REST API — это архитектурный стиль взаимодействия клиента и сервера, основанный на использовании HTTP-запросов. В WordPress с версии 4.7 REST API встроен по умолчанию и предоставляет стандартные маршруты для работы со страницами, записями, таксономиями, пользователями и другими сущностями.
Однако настоящая сила REST API раскрывается, когда вы создаете свои собственные эндпоинты — дополнительные URL, которые отвечают на ваши запросы и выполняют нужную логику. Это позволяет реализовать уникальные функции, например, получать данные из нестандартных таблиц, запускать кастомные процессы или интегрироваться с внешними сервисами.
REST API особенно полезен, если вы разрабатываете мобильное приложение, SPA на React или Vue.js, либо хотите предоставить сторонним сервисам доступ к данным вашего сайта.
Как зарегистрировать собственный эндпоинт REST API в WordPress
Регистрация кастомного маршрута в REST API происходит с помощью функции register_rest_route, которую нужно вызвать на хуке rest_api_init. Разберем пример, где мы создадим маршрут /wp-team/v1/hello, который будет возвращать простое сообщение.
add_action('rest_api_init', 'wpteam_register_hello_endpoint');
function wpteam_register_hello_endpoint() {
register_rest_route('wp-team/v1', '/hello', [
'methods' => 'GET',
'callback' => 'wpteam_hello_callback',
'permission_callback' => '__return_true',
]);
}
function wpteam_hello_callback() {
return ['message' => 'Привет от WP-Team REST API!'];
}В данном примере мы создали маршрут, который без авторизации отвечает на GET-запрос и возвращает JSON с сообщением. Обратите внимание на параметр permission_callback, который отвечает за проверку прав доступа. Здесь мы разрешили доступ всем, но в реальных проектах стоит реализовать более строгие проверки.
Пояснения к коду регистрации эндпоинта
Функция register_rest_route принимает три параметра: пространство имен (namespace), маршрут (route) и массив аргументов. В аргументах указываются методы HTTP, callback-функция для обработки запроса и проверка прав доступа.
Callback-функция должна вернуть данные, которые автоматически преобразуются в JSON. Это может быть массив, объект или WP_Error в случае ошибки.
Обработка параметров запроса и валидация данных
Очень часто нужно принимать от клиента параметры, например, фильтры, идентификаторы или данные для создания записей. Рассмотрим, как в REST API WordPress обрабатывать входящие параметры.
В примере ниже мы добавим в наш эндпоинт параметр name, который будет выводиться в ответе.
add_action('rest_api_init', 'wpteam_register_greet_endpoint');
function wpteam_register_greet_endpoint() {
register_rest_route('wp-team/v1', '/greet', [
'methods' => 'GET',
'callback' => 'wpteam_greet_callback',
'permission_callback' => '__return_true',
'args' => [
'name' => [
'required' => false,
'validate_callback' => function($param, $request, $key) {
return is_string($param) && strlen($param) > 0;
},
'sanitize_callback' => 'sanitize_text_field'
]
]
]);
}
function wpteam_greet_callback($request) {
$name = $request->get_param('name') ?? 'Гость';
return ['message' => "Привет, {$name}!"];
}Здесь мы указали аргумент name с правилами валидации и очистки данных. Это предотвращает передачу некорректных или вредоносных данных. Если параметр не передан, возвращается приветствие для «Гость».
Создание, обновление и удаление данных через REST API
REST API поддерживает методы POST, PUT, PATCH и DELETE, которые позволяют создавать, обновлять и удалять записи или другие данные. Ниже пример регистрации маршрута для создания новой записи кастомного типа «book».
add_action('rest_api_init', 'wpteam_register_create_book_endpoint');
function wpteam_register_create_book_endpoint() {
register_rest_route('wp-team/v1', '/book', [
'methods' => 'POST',
'callback' => 'wpteam_create_book_callback',
'permission_callback' => function() {
return current_user_can('edit_posts');
},
'args' => [
'title' => [
'required' => true,
'validate_callback' => function($param) {
return is_string($param) && strlen($param) > 0;
},
'sanitize_callback' => 'sanitize_text_field'
],
'author' => [
'required' => true,
'sanitize_callback' => 'sanitize_text_field'
]
]
]);
}
function wpteam_create_book_callback($request) {
$title = $request->get_param('title');
$author = $request->get_param('author');
$post_id = wp_insert_post([
'post_title' => $title,
'post_type' => 'book',
'post_status' => 'publish'
]);
if (is_wp_error($post_id) || !$post_id) {
return new WP_Error('cannot_create', 'Не удалось создать запись', ['status' => 500]);
}
update_post_meta($post_id, 'author', $author);
return ['message' => 'Книга успешно создана', 'id' => $post_id];
}В данном примере мы проверяем права пользователя, принимаем обязательные параметры, создаем новую запись и сохраняем мета-данные. Такой подход позволяет строить полноценные CRUD-интерфейсы через REST API.
Полезные плагины для работы с REST API в WordPress
Для упрощения разработки и тестирования REST API в WordPress рекомендую обратить внимание на следующие плагины:
- WP REST API Controller — позволяет управлять доступностью стандартных эндпоинтов и настраивать разрешения без кода.
- Advanced Custom Fields (ACF) — совместим с REST API через аддон ACF to REST API, что облегчает работу с пользовательскими полями.
- Postman — хотя это не плагин для WordPress, Postman отлично подходит для тестирования ваших REST API запросов.
Использование этих инструментов ускорит и упростит разработку кастомных API решений для вашего сайта.
Советы по безопасности при работе с REST API
REST API открывает мощные возможности, но требует внимательного отношения к безопасности. Вот несколько рекомендаций:
- Всегда проверяйте права доступа в
permission_callback. Не открывайте эндпоинты без ограничений. - Используйте nonce и аутентификацию, если это необходимо, особенно для методов, изменяющих данные.
- Валидация и санитизация входящих данных — обязательный этап для предотвращения SQL-инъекций и XSS.
- Ограничивайте объем возвращаемых данных, чтобы не раскрывать лишнюю информацию.
Следуя этим советам, вы убережете сайт от большинства распространенных угроз.
Заключение: REST API — мощный инструмент для расширения WordPress
Использование REST API позволяет вывести разработку на новый уровень, создавая гибкие и современные решения. В этой статье мы рассмотрели основы регистрации собственных эндпоинтов, обработки параметров, создания данных и обеспечения безопасности. Экспериментируйте с кодом, адаптируйте под задачи вашего проекта, и WP-Team поможет вам в этом!