Заметки

WordPress API: как работает REST API и с чего начать

M
Markabus
·
Рабочий стол у окна при дневном свете: ноутбук с открытой админкой WordPress, три бумажные карточки со значками кода, соединённые стрелками, компактный сервер и смартфон, открывающий тот же сайт — обмен запросами и ответами между клиентами и сервером; иллюстрация к статье про WordPress REST API.

У каждого сайта на WordPress есть встроенный программный интерфейс — «дверь», через которую другие программы могут читать и менять контент, не открывая админку. Мобильное приложение, связка с CRM, скрипт автопубликации и даже ИИ-агент говорят с сайтом одним языком — через REST API. Разбираемся, как он устроен, как посмотреть его на своём сайте и что важно знать про безопасность.

Что такое REST API простыми словами

REST (Representational State Transfer — «передача репрезентативного состояния») — архитектурный стиль, при котором программы обмениваются данными по обычному HTTP — тому же протоколу, по которому браузер открывает страницы. Ответы приходят в формате JSON (JavaScript Object Notation) — компактном текстовом формате «ключ: значение», который понимает любой язык программирования.

Логика повторяет работу с базой данных: методом GET данные читают, POST — создают, PUT или PATCH — обновляют, DELETE — удаляют. Каждый «адрес» в API называется эндпоинтом (конечной точкой): /wp-json/wp/v2/posts отвечает за записи, /wp-json/wp/v2/pages — за страницы, /wp-json/wp/v2/media — за медиафайлы.

Как посмотреть API своего сайта

Включать ничего не нужно: REST API работает из коробки начиная с WordPress 4.7. Откройте в браузере адрес https://ваш-сайт.ру/wp-json/ — увидите JSON-описание всех возможностей: пространства имён (namespaces), маршруты (routes) и их аргументы. API самодокументирован: по этому индексу можно понять, что сайт умеет, без отдельной документации.

Практический пример — получить последние десять записей:

curl https://ваш-сайт.ру/wp-json/wp/v2/posts?per_page=10

В ответе придёт массив JSON-объектов с заголовком, содержимым, датой и служебными ссылками. Полезные детали: общее число записей приходит в заголовке ответа X-WP-Total, а связанные данные (картинка записи, автор) — в блоке _embedded, если добавить параметр ?_embed. Постраничная навигация — параметры page и per_page.

Аутентификация: от анонимного чтения к паролю приложения

Без авторизации API отдаёт только публичное: опубликованные записи, страницы, открытые данные. Создание, правки, черновики и настройки требуют аутентификации. Основные способы:

  • Пароль приложения (Application Passwords) — штатный механизм с WordPress 5.6. Создаётся в профиле пользователя («Пользователи → Профиль → Пароли приложений»), работает по стандартной Basic-аутентификации поверх HTTPS и подходит для скриптов и интеграций.
  • Cookie + nonce — для JavaScript, который работает на самом сайте (тема или плагин): браузер уже авторизован, а одноразовый токен nonce защищает запрос от подделки.
  • JWT и OAuth — через плагины, когда внешнему приложению нужен временный токен вместо хранения пароля.

Важно: пароль приложения наследует права пользователя, которому принадлежит. Для интеграции заведите отдельную учётную запись с минимально необходимой ролью — например, «автора», если интеграция только публикует материалы.

Свой эндпоинт: register_rest_route

Когда стандартных маршрутов мало, плагин или тема регистрирует свой — функцией register_rest_route(). Минимальный рабочий пример:

add_action( 'rest_api_init', function () {
    register_rest_route( 'myplugin/v1', '/stats', [
        'methods'             => 'GET',
        'permission_callback' => '__return_true',
        'callback'            => function () {
            return rest_ensure_response( [
                'posts' => wp_count_posts()->publish,
            ] );
        },
    ] );
} );

Маршрут станет доступен по адресу /wp-json/myplugin/v1/stats. Самая важная строка — permission_callback: именно она решает, кому можно вызывать эндпоинт. Начиная с WordPress 5.5 регистрация маршрута без этого параметра вызывает предупреждение, а «забытая» проверка прав — самая частая дыра самодельных API. Если эндпоинт публичный, напишите __return_true явно; если только для админов — проверяйте current_user_can().

Что реально автоматизируют через WordPress API

Классические сценарии: автопубликация из внешней системы (генератор описаний товаров пишет материалы напрямую в API), синхронизация магазина с 1С или складским сервисом, мобильные приложения и headless-архитектура, где WordPress работает бэкендом, а фронтенд собран отдельно — например, на Next.js.

WooCommerce добавляет собственное пространство имён /wc/v3: товары, заказы и купоны доступны теми же методами GET и POST. Как магазин живёт под капотом, мы разбирали в статье про хуки WooCommerce.

Новое поколение потребителей API — ИИ-агенты: WordPress 7 получил встроенный AI Client, а агентские шлюзы вроде MCP подключаются к сайту тоже поверх его API. Как это выглядит на практике для магазина — в нашем материале «MCP для WooCommerce: даём ИИ доступ к магазину». Если удобнее управлять сайтом из терминала без HTTP-запросов — те же операции с контентом умеет делать WP-CLI.

Безопасность: что проверять в первую очередь

REST API — это дверь, и относиться к ней стоит по-дверному:

  • Обновляйте ядро. Летом 2026 исследователи показали атаку wp2shell: через batch-эндпоинт /wp-json/batch/v1 на необновлённых сайтах можно было добраться до SQL-инъекции и даже выполнения кода. Свежий пример из того же сезона — критическая уязвимость CVE-2026-87902 в ядре WordPress.
  • Минимальные права. Отдельный пользователь для интеграции, роль не выше необходимой; пароли приложений отзываются на том же экране, где создаются.
  • HTTPS обязателен. Пароль приложения в Basic-аутентификации передаётся в каждом запросе, и без шифрования его видно в открытом виде.
  • Логи. Подозрительные серии POST-запросов к /wp-json/ хорошо видны в логах WordPress; общий чек-лист защиты — в нашем гайде по безопасности WordPress.

Когда REST API не нужен

Если задача — разово поправить текст или виджет, админка быстрее и безопаснее. Серверные операции — обновления, поиск-замена, массовый импорт — удобнее делать через WP-CLI: он вызывает те же функции ядра, но без сети и лимитов HTTP. REST API выигрывает, когда с сайтом говорит другая система: приложение, внешний сервис, конвейер контента или ИИ-агент.

Начните с малого: откройте /wp-json/ своего сайта, сделайте curl-запрос списка записей, создайте пароль приложения и опубликуйте черновик из скрипта. Это час практики, после которого архитектура API перестаёт быть абстракцией.

Частые вопросы

Q.Чем REST API отличается от XML-RPC?

XML-RPC — старый протокол удалённого управления WordPress (через файл xmlrpc.php), появился задолго до REST API и заметно беднее по возможностям. Современные клиенты и интеграции работают через REST API, а XML-RPC хостеры и плагины безопасности часто отключают: через него продолжают перебирать пароли и злоупотреблять pingback.

Q.Можно ли закрыть REST API от внешних запросов?

Да, фильтром rest_authentication_errors можно отдавать ошибку всем неавторизованным внешним запросам. Но полностью «вырубать» API нельзя: блочный редактор Гутенберга внутри админки сам обращается к эндпоинтам REST API. Закрывайте внешний доступ, не трогая локальные запросы сайта.

Q.Почему API возвращает 401 или 403?

401 значит, что аутентификация не прошла: нет пароля приложения или он неверный — проверьте также, что URL в настройках пароля совпадает с реальным адресом сайта. 403 — аутентификация прошла, но у пользователя не хватает прав на действие: посмотрите роль учётной записи, которой принадлежит пароль приложения.

Источники

←
Предыдущая
Гибридный поиск для RAG: BM25 + векторы

Читайте также

Две стопки карточек — кремовая и зелёная — сливаются в одну общую колонку, сверху лежит латунная лупа: иллюстрация к статье о гибридном поиске для RAGЗаметки
25 сентября 2026 г.

Гибридный поиск для RAG: BM25 + векторы

Почему векторный поиск теряет артикулы, коды ошибок и редкие термины, как BM25 это исправляет и как слить два списка результатов через RRF — с примерами для Qdrant, PostgreSQL и Elasticsearch.

Читать →
Фотореалистичный кадр рабочего стола сбоку: на переднем плане крупная поворотная ручка на металлическом пульте с пятью метками растущего размера, повёрнутая почти до упора, рядом горит янтарный индикатор и лежит секундомер, за ними в расфокусе монитор с чатом, где под вопросом длинный серый блок размышлений и внизу короткий ответ — иллюстрация к статье о режиме рассуждений у thinking-моделей.Заметки
24 сентября 2026 г.

Thinking-модели: когда включать режим рассуждений

У современных моделей есть переключатель глубины рассуждений — effort, thinking_level, reasoning_effort. Разбираем, что он реально меняет, сколько стоит и на каких задачах его стоит поднимать, а на каких он только жжёт токены.

Читать →
Тёмный рабочий стол разработчика крупным планом: ноутбук с абстрактной облачной консолью на экране, рядом аппаратный ключ безопасности и мини-сервер со светодиодами, на фоне в расфокусе второй монитор с кодомЗаметки
23 сентября 2026 г.

Vertex AI: когда он нужен вместо AI Studio

Модели одинаковые, а обвязка разная: ключ из AI Studio против проекта в Google Cloud с сервисными аккаунтами и выбором региона. Разбираем, где проходит граница, сколько это стоит и как переехать за полчаса — с поправкой на переименование Vertex AI в Gemini Enterprise Agent Platform.

Читать →