ворд-пресс.рф
Разработка

Свой REST API endpoint в WordPress: маршрут, параметры и права доступа

Регистрация собственного маршрута REST API, permission_callback, типизация аргументов и диагностика ответов.

Для своего REST API в WordPress зарегистрируйте маршрут через register_rest_route() на хуке rest_api_init. Начинайте с определения того, кто вправе обращаться к маршруту и какие данные он отдаёт, а не с запроса из JavaScript.

Маршрут или endpoint

Маршрут — адрес, например /wp-json/wpr8/v1/status. Endpoint связывает этот адрес с HTTP-методом, обработчиком и правилами доступа. Простая проверка GET подходит для обучения, но публичный endpoint не должен раскрывать приватные настройки, письма или информацию о пользователях.

Учебный endpoint со скрытым ответом

Пример возвращает статус только пользователю с правом manage_options. Его можно поместить в отдельный тестовый плагин WordPress.

<?php
/** Plugin Name: Example REST Status */
add_action( 'rest_api_init', function () {
    register_rest_route( 'wpr8/v1', '/status', array(
        'methods'             => WP_REST_Server::READABLE,
        'permission_callback' => function () {
            return current_user_can( 'manage_options' );
        },
        'callback'            => function ( WP_REST_Request $request ) {
            return new WP_REST_Response( array( 'status' => 'ready' ), 200 );
        },
    ) );
} );

Адрес тестирования: /wp-json/wpr8/v1/status. Для неавторизованного пользователя ожидается запрет доступа, а для администратора — JSON-ответ. Если тестируете из браузерного JavaScript, используйте поддерживаемый WordPress способ аутентификации REST; X-WP-Nonce помогает аутентифицированному запросу, но не заменяет проверку capability на сервере.

Аргументы и валидация

Для маршрута с параметрами укажите в args тип, обязательность, а при необходимости validate_callback и sanitize_callback. В обработчике проверяйте входные данные перед работой с БД. Если endpoint изменяет записи, используйте соответствующий HTTP-метод и проверяйте объектные права пользователя, а не только факт его авторизации.

Для сложных API создайте класс на базе WP_REST_Controller; у него будут отдельные методы проверки разрешений, получения данных и подготовки ответа.

Частые причины 401, 403 и 404

  • 401/403: пользователь не прошёл аутентификацию либо у него нет нужной capability.
  • 404: маршрут зарегистрирован не на том хуке, неверен namespace/путь или отключена маршрутизация.
  • 500: PHP-ошибка внутри callback; диагностика — в журнале тестового окружения.
  • CORS: браузер блокирует запрос из другого origin — нельзя лечить это включением Access-Control-Allow-Origin: * для приватного API.

Контроль безопасности

Не возвращайте в JSON секреты, токены или подробные трассировки ошибок. Не используйте __return_true в permission_callback для закрытых операций. Перед релизом запустите тесты: гость, пользователь без прав, администратор, неверные параметры, отсутствие записи, неожиданный HTTP-метод.

Общий обзор API опубликован в инструкции по REST API. Для работы с клиентом сначала решите задачу проверки прав, потом подключайте фронтенд.

Источник: https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Материал был полезен?

Помогите нам сделать материалы точнее и понятнее.