WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как добавить пользовательские конечные точки в WordPress API

304

Недавно я работал над проектом, в котором мы хотели использовать AngularJS во внешнем интерфейсе и WordPress в качестве серверной части. Для обмена данными между AngularJS и WordPress мы использовали WordPress REST API. Это был хороший опыт работы с REST API в WordPress. WordPress предоставляет очень чистый и эффективный способ начать использовать REST API. Эта популярная CMS также позволяет создавать настраиваемую конечную точку для отправки / получения данных через нее.

В этой статье мы изучаем, как создать настраиваемую конечную точку в WordPress REST API. Я собираюсь создать настраиваемую конечную точку для запросов GET и POST.

Использование WordPress REST API

Все знают о популярности мобильных приложений и фреймворков JavaScript. При создании мобильного приложения или веб-сайта с использованием инфраструктуры JavaScript вам необходимо взаимодействовать с серверной частью для обмена данными.

Можно выбрать любую платформу, такую ​​как WordPress, Laravel для внутренних целей. Единственное требование – у вас должны быть конечные точки API на вашей серверной платформе для обмена данными с внешним интерфейсом. Фронтенд-система передает API-вызов бэкэнду. На бэкэнде мы должны построить систему, которая принимает запросы API и обрабатывает их.

В основном мы использовали два типа запросов в конечных точках API – GET и POST. Пока мы вызываем API с запросом GET, API будет предоставлять данные из базы данных в ответ или удалять данные в базе данных. В случае запросов POST мы либо вставляем записи в базу данных, либо сверяем данные с базой данных. Конечно, это не правило большого пальца. Пользователи могут решить, как он себя ведет, в зависимости от их требований.

Авторизация с помощью WordPress REST API

WordPress REST API требует, чтобы вы следовали базовому процессу аутентификации. В Basic Auth вы должны отправить токен в заголовке авторизации при отправке запроса API. Начиная с WordPress 5.6, в систему добавлена ​​новая функция «Пароли приложений». Этот пароль приложения (с именем пользователя) можно использовать в качестве токена в заголовке авторизации.

Пароли приложений доступны всем пользователям на сайтах, обслуживаемых через SSL / HTTPS. Если по какой-то причине вы не используете SSL на своем веб-сайте, сделайте его доступным с помощью фильтра ниже.

add_filter( 'wp_is_application_passwords_available', '__return_true' );

Вы найдете опцию для паролей приложений на странице Пользователи-> Профиль. Сгенерируйте пароль, просто введя имя приложения.

Как добавить пользовательские конечные точки в WordPress API

На скриншоте вы заметили пробелы в пароле. Пароли приложений можно использовать с пробелами или без них. Если он включен, пробелы будут просто удалены, прежде чем пароль будет хеширован и проверен на стороне WordPress.

Теперь вы готовы ввести пароль. Затем, чтобы создать токен Auth, вам необходимо создать закодированную в Base64 версию вашего имени пользователя и пароля приложения. Допустим, ваше имя пользователя – admin, а пароль – Ho9c 9vGs AOBG nXb0 FPpr W5vO. Используйте следующий оператор, который дает окончательный действительный токен.

<?php
$username = 'admin';
$application_password = 'Ho9c 9vGs AOBG nXb0 FPpr W5vO';
 
echo base64_encode($username.':'.$application_password);

Приведенный выше оператор возвращает значение токена как YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=. Этот токен необходимо отправить в заголовке авторизации при вызове WordPress REST API.

Вход с помощью WordPress REST API

Мы готовы со значением токена Basic Auth. Теперь давайте создадим настраиваемую конечную точку для системы входа в систему. В приведенном ниже коде мы пишем конечную точку API, которая получает учетные данные пользователя и проверяет, верны ли данные или нет. Вам нужно добавить этот код в свой functions.phpфайл темы .

add_action(
    'rest_api_init',
    function() {
        register_rest_route(
            'api',
            'login',
            array(
                'methods'  => 'POST',
                'callback' => 'login',
            )
        );
    }
);

WordPress предоставляет действие rest_api_init, с помощью которого мы можем создавать собственные конечные точки. Здесь я использую функцию register_rest_route, которая создает указанную выше конечную точку API как YOUR_SITE_URL / wp-json / api / login.

В нашем коде «api» – это пространство имен, «логин» – это маршрут, метод – «POST», а функция обратного вызова – «логин». У метода обратного вызова будет реальная логика.

Чтобы написать логику процесса входа в систему, требуемые параметры POST – это адрес электронной почты и пароль, которые должны быть отправлены из внешнего интерфейса вместе с заголовком авторизации. Размещая эти данные, вам необходимо отправить их в формате JSON. Например, из VSCode с использованием Rest Client Extension я отправляю запрос POST, как показано на скриншоте ниже.

Как добавить пользовательские конечные точки в WordPress API

Здесь мы передали токен, созданный на предыдущем шаге, в качестве значения заголовка авторизации.

Добавьте приведенный ниже код для login()метода в functions.phpфайл.

function login( WP_REST_Request $request) {
    $arr_request = json_decode( $request->get_body() );
 
    if (! empty( $arr_request->email) &&! empty( $arr_request->password)) {
        // this returns the user ID and other info from the user name.
        $user = get_user_by( 'email', $arr_request->email );
 
        if (! $user) {
            // if the user name doesn't exist.
            return [
                'status' => 'error',
                'message' => 'Wrong email address.',
            ];
        }
 
        // check the user's login with their password.
        if (! wp_check_password( $arr_request->password, $user->user_pass, $user->ID)) {
            // if the password is incorrect for the specified user.
            return [
                'status' => 'error',
                'message' => 'Wrong password.',
            ];
        }
 
        return [
            'status' => 'success',
            'message' => 'User credentials are correct.',
        ];
    } else {
        return [
            'status' => 'error',
            'message' => 'Email and password are required.',
        ];
    }
}

Примечание. Если вы получили сообщение об ошибке типа «Не найден маршрут, соответствующий URL-адресу и методу запроса», вам необходимо обновить постоянную ссылку.

Получив значение «успешно» для ключа «статус», вы можете зарегистрировать пользователя во внешнем приложении.

Создайте конечную точку для запроса GET

Мы видели, как создавать собственные конечные точки для запросов POST. Теперь давайте рассмотрим запрос GET с помощью WordPress REST API. Для этого я напишу API, который удаляет пользователя. Из внешнего интерфейса вы должны передать идентификатор пользователя в качестве параметра GET.

add_action(
    'rest_api_init',
    function() {
        register_rest_route(
            'api',
            'delete_user/(?P<id>d+)',
            array(
                'methods'  => 'GET',
                'callback' => 'delete_user',
            )
        );
    }
);

Этот код создает конечную точку API как YOUR_SITE_URL / wp-json / api / delete_user / id. В эту конечную точку вместо id вы должны передать фактический идентификатор пользователя.

У метода обратного вызова delete_userбудет следующий код.

function delete_user( $data) {
    // delete the user
    require_once(ABSPATH.'wp-admin/includes/user.php' );
    if (wp_delete_user($data['id'])) {
        return [
            'status' => 'success',
            'message' => 'User deleted successfully.',
        ];
    }
 
    return [
        'status' => 'error',
        'message' => 'It seems you passed the wrong user id.',
    ];
}

Надеюсь, вы понимаете, как создать собственную конечную точку в WordPress REST API. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее