По мере того, как я занимался интеграцией мобильных приложений с REST API WordPress, возникло несколько ситуаций, когда мне понадобилось проверять, управлять или манипулировать входящими запросами REST API.
Существует ряд причин, по которым вы можете захотеть управлять входящими запросами WordPress REST API до того, как они начнут взаимодействовать с основным приложением. В моем случае мне нужно было определить:
- какая конечная точка (эндпоинт) запрашивается,
- передан ли определённый ключ,
- присутствуют ли ошибки.
- если все хорошо — продолжить выполнение.
Но это одна из многих возможностей. Меня больше интересует, по крайней мере в этой статье, показать как манипулировать запросом до того, как он будет отправлен на обработку.
Входящие запросы в REST API WordPress
О хуке
Обратите внимание, что хук rest_pre_dispatch
срабатывает до того, как запрос REST API будет обработан WordPress. Этот хук позволяет нам перехватить входящий запрос и манипулировать им так, как нам нужно.
Иногда нам может понадобиться просто просмотреть поступающую информацию. В других случаях нам может потребоваться изменить запрос перед отправкой на протяжении всего жизненного цикла. Некоторые из этих манипуляций могут включать в себя:
- проверка параметров или заголовков,
- проверка аутентификации пользователя,
- или выполнение какого-либо действия и данные для обработки.
Обратившись к документации, вы увидите, что для этого требуется три параметра:
$result
$server
$request
В $result
могут быть различные типы данных, возвращаемых клиенту (это может быть массив, булево число, целое число, строка, экземпляр WP_Error
и так далее).
$server
является экземпляром WP_REST_Server
, который является основным классом, отвечающим за обработку запроса.
А $request
содержит данные, из которых мы можем извлечь информацию о запросе.
Практический пример
Скажем, например, мы хотим сделать следующее:
- прочитать обрабатываемый маршрут,
- выйти, если мы не обращаемся к конечной точке
users
, - прочитать определенное значение заголовка,
- выполнить специализированную обработку,
- обработать ошибку или вернуть ответ об успешной операции.
Взяв за основу свой собственный код, вот пример того, как я сделал следующее (с опущенной частью основной логики домена):
<?php
add_filter(
'rest_pre_dispatch',
function (mixed $result, WP_REST_Server $server, WP_REST_Request $request) {
// Get the route being requested
$route = $request->get_route();
// Only proceed if we're creating a user
if ( false === strpos($route, '/wp/v2/users')) {
return $result;
}
// Get the key from the request headers
$key = $request->get_header( 'X-Application-Key' );
// Handle specialized processing here...
// $value = ...
if (is_wp_error($value)) {
return new WP_Error(
'rest_cannot_create_object',
__( 'There was a problem creating the object.' ),
[
'status' => rest_authorization_required_code(),
'data' => $value
]
);
}
// Additional processing...
// Return data to the client to parse.
return ['success' => true];
}
После завершения этой обработки ваше приложение может написать условную логику о том, следует ли продолжить выполнение запроса или остановиться и обработать ошибку или если возвращенное значение false
.
Суть хука
В конечном счете, важно знать, что вы можете манипулировать запросом до того, как он будет обработан REST API, и это доступный хук, который позволяет вам это сделать.
Ссылки
Источник: https://www.kobzarev.com/wordpress/manipulate-incoming-wordpress-rest-api-requests/