Манипулирование входящими запросами в REST API WordPress

По мере того, как я занимался интеграцией мобильных приложений с 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 содержит данные, из которых мы можем извлечь информацию о запросе.

Практический пример

Скажем, например, мы хотим сделать следующее:

  1. прочитать обрабатываемый маршрут,
  2. выйти, если мы не обращаемся к конечной точке users,
  3. прочитать определенное значение заголовка,
  4. выполнить специализированную обработку,
  5. обработать ошибку или вернуть ответ об успешной операции.

Взяв за основу свой собственный код, вот пример того, как я сделал следующее (с опущенной частью основной логики домена):

<?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, и это доступный хук, который позволяет вам это сделать.

Ссылки

Источник: Manipulate Incoming WordPress REST API Requests

Источник: https://www.kobzarev.com/wordpress/manipulate-incoming-wordpress-rest-api-requests/

Михаил Кобзарёв

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все. Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса. Ведет блог о разработке, дайджест в телеграмме и в ВК. Любит сиськи, баню и радиоэлектронику. 100% патриот (но это не точно). Тролль 542 уровня. Ездит в отпуск раз в 5 лет.

Добавить комментарий

%d такие блоггеры, как: