Как настроить REST API для автоматической публикации в нестандартную CMS

Введение: что именно мы настраиваем

Задача: настроить REST API для публикации контента в нестандартную CMS так, чтобы можно было автоматизировать загрузку статей, медиа и метаданных из внешних систем. В руководстве собраны конкретные шаги, примеры запросов, шаблоны кода и отличия на примерах CMS‑интеграция WordPress и 1C‑Битрикс интеграция.

Основные элементы архитектуры

  • Источник данных: система, откуда приходит контент (ERP, редактор, 1С, база данных).
  • Транспорт: HTTP REST, обеспечивающий обмен JSON.
  • Приёмная точка CMS: готовый REST API CMS или кастомный endpoint.
  • Аутентификация: токены, webhooks, application passwords, TLS.
  • Обработка ошибок и очереди: retry, idempotency, логирование.

FAQ-инструкция: практические вопросы и ответы

1. С чего начинать: проверка возможностей CMS

Проверить наличие нативного REST API. Если его нет, нужно добавить кастомный endpoint. Критерии оценки:

  • есть ли метод создания записей программно;
  • можно ли загружать медиа по URL или через multipart;
  • какая аутентификация поддерживается.

2. Как настроить простую публикацию в WordPress

CMS‑интеграция WordPress: если используете WordPress 4.7+, есть WP REST API. Минимальный сценарий публикации:

  1. Создать application password или настроить JWT для автоматической авторизации.
  2. Загрузить изображение через endpoint /wp/v2/media или передать ссылку в поле featured_media.
  3. Создать пост через /wp/v2/posts с полями title, content, status, categories.

Пример команды curl (интерактивный вид):

curl -X POST 'https://site.example/wp-json/wp/v2/posts' \
  -H 'Authorization: Basic base64(user:application_password)' \
  -H 'Content-Type: application/json' \
  -d '{title: 'Заголовок', content: 'Текст статьи', status: 'publish'}'

Советы:

  • используйте application passwords для сервисов без UI;
  • если нужны кастомные поля, регистрируйте их через register_meta и указывайте в REST API;
  • для массовой загрузки медиа сначала отправляйте файл на /wp/v2/media, затем указывайте полученный ID в featured_media.

3. Как организовать 1C‑Битрикс интеграция

В 1C‑Битрикс чаще приходится создавать кастомный обработчик, потому что нативный REST ориентирован на Bitrix24. Подход:

  1. Добавить в корень сайта обработчик, например local/api/publish.php, который принимает POST JSON.
  2. Проверять HMAC или простой shared secret в заголовке для авторизации.
  3. Использовать API CIBlockElement для создания элементов инфоблока, хранить связи с внешними ID.

Минимальный PHP-пример приемника:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$payload = json_decode(file_get_contents('php://input'), true);
if (!$payload || $_SERVER['HTTP_X_API_KEY'] !== 'your_secret') {
  http_response_code(403);
  echo 'Forbidden';
  exit;
}
$el = new CIBlockElement;
$fields = array(
  'IBLOCK_ID' => 5,
  'NAME' => $payload['title'],
  'DETAIL_TEXT' => $payload['content'],
);
$ID = $el->Add($fields);
if ($ID) echo json_encode(['result' => 'ok', 'id' => $ID]);
else { http_response_code(500); echo $el->LAST_ERROR; }
?>

Особенности:

  • обязательно проверяйте входящие данные и размер запросов;
  • храните external_id, чтобы обновлять записи, а не дублировать;
  • для больших файлов применяйте асинхронную загрузку через очередь.

4. Idempotency и обработка повторных запросов

Добавляйте заголовок X-Request-Id или поле external_id. Логика:

  • при поступлении запроса с external_id ищите запись и обновляйте её;
  • если нет — создавайте и сохраняйте соответствие external_id=>id;
  • на уровне базы делайте уникальные индексы по external_id, чтобы избежать гонок.

5. Работа с медиа: оптимальные практики

Два подхода:

Подход Когда использовать Плюсы Минусы
Загрузка файлов в CMS Контроль за хранением Надежно, можно генерировать превью Нагрузка на хранилище
Хранение по URL CDN или внешнее хранилище Минимальная нагрузка на CMS Зависимость от сторонних сервисов

6. Логирование и мониторинг

Обязательные метрики:

  • успешные/ошибочные запросы по endpoint;
  • время обработки; latency для медиа-загрузок;
  • количество дубликатов и конфликтов idempotency.

Логи храните в отдельной таблице и отправляйте ключевые события в систему мониторинга (Prometheus, Sentry).

Сравнение: CMS‑интеграция WordPress vs 1C‑Битрикс интеграция

Критерий WordPress 1C‑Битрикс
Нативный REST Да, /wp-json/wp/v2 Часто нужен кастомный обработчик
Аутентификация application passwords, JWT, OAuth вебхуки, shared secret, custom
Массовая загрузка медиа через media endpoint лучше через очередь
Типичное время внедрения 1-3 дня 3-10 дней

Кейсы и практические рекомендации

Кейс A: массовая миграция новостей. Решение: собрать CSV с external_id, свернуть в пакетные запросы и применить параллельную загрузку с контролем скорости. Для WordPress используйте WP-CLI для batch задач.

Кейс B: ежедневная лента с медиа из DAM. Решение: выгрузка метаданных + ссылки; в CMS сохраняем только ссылку и кешируем превью через CDN.

Контроль над безопасностью и масштабом

  • ограничьте IP-диапазоны клиента, если можно;
  • используйте TLS 1.2+ и HSTS;
  • внедрите rate limiting на уровне Nginx или приложения;
  • включите валидацию размера и типа контента для медиа.

Итог: чек-лист перед запуском

  1. проверить существование endpoint и права доступа;
  2. настроить аутентификацию и проверить её с Postman/curl;
  3. реализовать idempotency и логирование;
  4. обработать медиа и ограничить размеры;
  5. прогнать нагрузочное тестирование и настроить мониторинг.

Если нужно, могу подготовить готовые скрипты для вашего случая: curl команды, PHP-приёмник для 1C‑Битрикс или Node/Python клиент для REST API для публикации и CMS‑интеграция WordPress. Уточните CMS и формат входных данных.