...
✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak dodać niestandardowe punkty końcowe do API WordPress?

87

Ostatnio pracowałem nad projektem, w którym chcieliśmy wykorzystać AngularJS na frontendzie i WordPress jako backend. W celu wymiany danych pomiędzy AngularJS a WordPress wykorzystaliśmy WordPress REST API. Praca z REST API w WordPressie była dobrym doświadczeniem. WordPress zapewnia bardzo czysty i wydajny sposób na rozpoczęcie korzystania z interfejsu API REST. Ten popularny CMS pozwala również na zbudowanie niestandardowego punktu końcowego do wysyłania/odbierania danych za jego pośrednictwem.

W tym artykule dowiemy się, jak utworzyć niestandardowy punkt końcowy w WordPress REST API. Zamierzam zbudować niestandardowy punkt końcowy dla żądania GET i POST.

Korzystanie z WordPress REST API

Wszyscy wiedzą o popularności aplikacji mobilnych i frameworków JavaScript. Budując aplikację mobilną lub stronę internetową z wykorzystaniem frameworka JavaScript musisz wejść w interakcję z backendem w celu wymiany danych.

Do celów backendowych można wybrać dowolną platformę, taką jak WordPress, Laravel. Jedynym wymaganiem jest posiadanie punktów końcowych API na platformie backendowej do wymiany danych z frontendem. System frontendowy daje wywołanie API do backendu. Na backendzie powinniśmy zbudować system, który będzie odbierał żądania API i je przetwarzał.

Najczęściej używaliśmy dwóch typów żądań w punktach końcowych API – GET i POST. Podczas gdy wywołujemy API z żądaniem GET, API w odpowiedzi poda dane z bazy danych lub usunie dane w bazie danych. W przypadku żądań POST albo wstawiamy rekordy do bazy danych, albo porównujemy dane z bazą danych. Oczywiście nie jest to zasada kciuka. Użytkownicy mogą decydować, jak się zachowuje, w zależności od ich wymagań.

Autoryzacja przy użyciu WordPress REST API

WordPress REST API wymaga śledzenia przepływu Basic Auth. W Basic Auth musisz wysłać token w nagłówku Authorization podczas wysyłania żądania API. Począwszy od WordPress 5.6, w systemie pojawia się nowa funkcja „Hasła aplikacji". To hasło aplikacji (z nazwą użytkownika) może być używane jako token w nagłówku Authorization.

Hasła aplikacji są dostępne dla wszystkich użytkowników w witrynach obsługiwanych przez SSL/HTTPS. Jeśli z jakiegoś powodu nie korzystasz z SSL na swojej stronie, udostępniasz go za pomocą poniższego filtra.

add_filter( 'wp_is_application_passwords_available', '__return_true' );

Opcję Hasła aplikacji znajdziesz na stronie Użytkownicy->Profil. Wygeneruj hasło, po prostu wprowadzając nazwę aplikacji.

Jak dodać niestandardowe punkty końcowe do API WordPress?

Na zrzucie ekranu zauważysz spacje w haśle. Hasła aplikacji mogą być używane z lub bez spacji. Jeśli zostaną uwzględnione, spacje zostaną po prostu usunięte, zanim hasło zostanie zaszyfrowane i zweryfikowane po stronie WordPress.

Teraz jesteś gotowy z hasłem. Następnie, aby utworzyć token Auth, musisz utworzyć zakodowaną Base64 wersję swojej nazwy użytkownika i hasła aplikacji. Załóżmy, że twoja nazwa użytkownika to „admin”, a hasło to „Ho9c 9vGs AOBG nXb0 FPpr W5vO”. Użyj poniższej instrukcji, która daje ostateczny ważny token.

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

Powyższa instrukcja zwraca wartość tokena jako YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=. Ten token musisz wysłać w nagłówku Authorization podczas wywoływania WordPress REST API.

Zaloguj się za pomocą WordPress REST API

Jesteśmy gotowi z wartością tokena Basic Auth. Teraz zbudujmy niestandardowy punkt końcowy dla systemu logowania. W poniższym kodzie piszemy punkt końcowy API, który otrzymuje dane uwierzytelniające użytkownika i sprawdza, czy dane są poprawne, czy nie. Musisz dodać ten kod w swoim functions.phppliku motywów .

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

WordPress udostępnia akcję „rest_api_init”, za pomocą której możemy zbudować nasze niestandardowe punkty końcowe. Tutaj używam funkcji register_rest_route, która produkuje powyższy punkt końcowy API jako YOUR_SITE_URL/wp-json/api/login.

W naszym kodzie „api” to przestrzeń nazw, „login” to trasa, metoda to „POST”, a funkcja zwrotna to „login”. Metoda wywołania zwrotnego będzie miała rzeczywistą logikę.

Aby napisać logikę przepływu logowania, wymagane parametry POST to e-mail i hasło, które należy przesłać z frontendu wraz z nagłówkiem Authorization. Publikując te dane, musisz przesłać je w formacie JSON. Na przykład z VSCode za pomocą Rest Client Extension wysyłam żądanie POST, jak pokazano na zrzucie ekranu poniżej.

Jak dodać niestandardowe punkty końcowe do API WordPress?

Tutaj przekazaliśmy token utworzony w poprzednim kroku jako wartość nagłówka Authorization.

Dodaj poniższy kod dla login()metody w functions.phppliku.

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.',
        ];
    }
}

Uwaga: jeśli otrzymasz błąd typu „Nie znaleziono trasy pasującej do adresu URL i metody żądania”, musisz zaktualizować swój link bezpośredni.

Po otrzymaniu wartości „success” dla klucza „status” możesz zalogować użytkownika w aplikacji frontendowej.

Zbuduj punkt końcowy dla żądania GET

Widzieliśmy, jak budować niestandardowe punkty końcowe dla żądań POST. Teraz przyjrzyjmy się żądaniu GET za pomocą WordPress REST API. W tym celu napiszę API, które usuwa użytkownika. Z interfejsu użytkownika należy przekazać identyfikator użytkownika jako parametr GET.

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

Ten kod generuje punkt końcowy interfejsu API jako YOUR_SITE_URL/wp-json/api/delete_user/id. Do tego punktu końcowego zamiast id należy przekazać rzeczywisty identyfikator użytkownika.

Metoda wywołania zwrotnego delete_userbędzie miała następujący kod.

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.',
    ];
}

Mam nadzieję, że rozumiesz, jak zbudować niestandardowy punkt końcowy w WordPress REST API. Podziel się swoimi przemyśleniami i sugestiami w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów