Как использовать REST API WordPress для создания собственных приложений

REST API WordPress — это мощный инструмент, который позволяет взаимодействовать с сайтом на WordPress через HTTP-запросы. С его помощью можно создавать собственные приложения, мобильные клиенты, одностраничные приложения и интеграции с другими сервисами. В этой статье мы подробно разберём, как использовать REST API WordPress для разработки кастомных решений, приведём примеры кода и расскажем, как создавать собственные эндпоинты.

Что такое REST API в WordPress и зачем он нужен

REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия между клиентом и сервером через стандартные HTTP-методы (GET, POST, PUT, DELETE). В WordPress REST API позволяет работать с основными сущностями сайта (посты, страницы, пользователи, таксономии) и расширять функциональность, создавая свои собственные маршруты и обработчики.

Главные преимущества REST API в WordPress:

  • Отделение фронтенда от бэкенда — можно создавать SPA или мобильные приложения, используя WordPress только как backend.
  • Упрощение интеграции с внешними сервисами и приложениями.
  • Гибкость и расширяемость — можно создавать свои собственные API-маршруты для специфических задач.

Как отправлять запросы к REST API WordPress

Для работы с REST API можно использовать любой HTTP-клиент: браузер, curl, Postman, JavaScript (fetch, axios) и т.д. Базовый формат URL для запросов:

https://ваш-сайт.ru/wp-json/wp/v2/

Например, чтобы получить список последних постов, сделаем GET-запрос на https://ваш-сайт.ru/wp-json/wp/v2/posts. Можно добавлять параметры, например, ?per_page=5 для ограничения количества постов.

Пример запроса с помощью JavaScript fetch:

fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=5')
  .then(response => response.json())
  .then(posts => console.log(posts));

Аутентификация и безопасность REST API WordPress

Для чтения публичных данных не требуется аутентификация. Но для создания, редактирования или удаления данных нужна авторизация. В WordPress поддерживаются несколько способов аутентификации для REST API:

  • Basic Auth — простой способ, но не рекомендуется для продакшена, так как передаёт логин и пароль в открытом виде.
  • OAuth — более сложный, но безопасный метод.
  • Application Passwords — встроенный в WordPress способ создания паролей для приложений, удобный и безопасный.
  • JWT (JSON Web Token) — популярный способ, требующий установки плагина.

Для примера рассмотрим использование Application Passwords. Их можно создать в профиле пользователя WordPress. После получения пароля, запрос с Basic Auth выглядит так:

curl --user 'username:application_password' -X POST https://ваш-сайт.ru/wp-json/wp/v2/posts -d '{"title":"Заголовок","content":"Содержимое"}' -H 'Content-Type: application/json'

Создание собственного REST API эндпоинта в WordPress

Одно из основных преимуществ — возможность расширять API своими маршрутами и методами. Рассмотрим, как создать кастомный эндпоинт, который возвращает список последних отзывов (custom post type 'review').

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('rest_api_init', function () {
  register_rest_route('wpcom/v1', '/reviews', array(
    'methods' => 'GET',
    'callback' => 'wpcom_get_reviews',
  ));
});

function wpcom_get_reviews(WP_REST_Request $request) {
  $args = array(
    'post_type' => 'review',
    'posts_per_page' => 5,
  );
  $query = new WP_Query($args);
  $reviews = array();
  if ($query->have_posts()) {
    while ($query->have_posts()) {
      $query->the_post();
      $reviews[] = array(
        'id' => get_the_ID(),
        'title' => get_the_title(),
        'content' => get_the_content(),
      );
    }
    wp_reset_postdata();
  }
  return $reviews;
}

Теперь при запросе GET https://ваш-сайт.ru/wp-json/wpcom/v1/reviews вы получите JSON с последними отзывами.

Добавление параметров в собственный эндпоинт

Можно принимать параметры запроса, например, количество отзывов:

add_action('rest_api_init', function () {
  register_rest_route('wpcom/v1', '/reviews', array(
    'methods' => 'GET',
    'callback' => 'wpcom_get_reviews',
    'args' => array(
      'count' => array(
        'validate_callback' => function($param) {
          return is_numeric($param) && $param > 0 && $param <= 20;
        },
        'default' => 5,
      ),
    ),
  ));
});

function wpcom_get_reviews(WP_REST_Request $request) {
  $count = $request->get_param('count');
  $args = array(
    'post_type' => 'review',
    'posts_per_page' => $count,
  );
  $query = new WP_Query($args);
  $reviews = array();
  if ($query->have_posts()) {
    while ($query->have_posts()) {
      $query->the_post();
      $reviews[] = array(
        'id' => get_the_ID(),
        'title' => get_the_title(),
        'content' => get_the_content(),
      );
    }
    wp_reset_postdata();
  }
  return $reviews;
}

Теперь можно запрашивать ?count=10 для получения до 10 записей.

Плагины для работы с REST API WordPress

Существует несколько полезных плагинов, которые упрощают работу с REST API:

  • WP REST API Controller — позволяет настраивать доступ к API, управлять правами и видимостью полей без кода.
  • JWT Authentication for WP REST API — добавляет поддержку JWT-аутентификации.
  • Advanced Custom Fields to REST API — расширяет API для поддержки пользовательских полей ACF.

Использование данных плагинов позволяет быстро и безопасно расширять REST API без глубоких знаний PHP.

Практическое применение REST API WordPress

REST API подходит для множества задач:

  • Создание мобильных приложений, которые получают и отправляют контент.
  • Интеграция с внешними сервисами, например, CRM, маркетинговыми платформами.
  • Разработка кастомных фронтендов на React, Vue или Angular с бэкендом на WordPress.
  • Автоматизация публикации и обновления контента с помощью внешних скриптов.

Рассмотрим пример использования fetch в React для получения постов:

import React, { useEffect, useState } from 'react';

function WpcomPosts() {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    fetch('https://ваш-сайт.ru/wp-json/wp/v2/posts?per_page=5')
      .then(res => res.json())
      .then(data => setPosts(data));
  }, []);

  return (
    <div>
      <h2>Последние посты</h2>
      <ul>
        {posts.map(post => (
          <li key={post.id}>
            <h3 dangerouslySetInnerHTML={{ __html: post.title.rendered }}></h3>
            <div dangerouslySetInnerHTML={{ __html: post.excerpt.rendered }}></div>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default WpcomPosts;

Отладка и тестирование REST API WordPress

Для удобства разработки используйте инструменты:

  • Postman — мощный клиент для тестирования API-запросов.
  • WP-CLI — позволяет работать с REST API из командной строки.
  • Логирование и обработка ошибок — используйте в своих функциях WP_Error для возвращения ошибок и проверяйте их на клиенте.

Пример возврата ошибки в кастомном эндпоинте:

if (empty($reviews)) {
  return new WP_Error('no_reviews', 'Отзывы не найдены', array('status' => 404));
}

Сервис определения шаблона и плагинов на сайте