AVOdigital
ГлавнаяМатериал AVOdigital

Разработка REST API для интеграции корпоративных систем компании

Проектируем быстрое и безопасное REST API для обмена данными между сайтом, CRM и ERP. Протоколы, схемы, чек-лист и опыт AVOdigital.

Разработка сайтов

Нужен сайт для вашего бизнеса?

Пришлём состав сайта и смету под вашу задачу: лендинг — от 58 000 ₽, сайт компании — от 92 000 ₽. Можно просто задать вопрос в Telegram или MAX, без звонка.

Коротко:

Экспертное руководство по проектированию REST API для интеграции сайта, CRM и ERP. Рассматриваются схемы данных, протоколы OAuth2, JWT, брокеры очередей и кэширование. В конце — чек-лист запуска.

Разработка REST API для корпоративной интеграции — ключ к бесшовному обмену данными между сайтом, CRM и ERP. Мы в AVOdigital спроектировали более 15 API-шлюзов, которые выдерживают >10 000 RPS и соответствуют 152-ФЗ. В статье — конкретные протоколы, схемы данных и чек-лист.

Архитектура API: от протоколов до схем данных

Интеграция корпоративных систем (сайт на WordPress / 1C-Битрикс, CRM типа amoCRM или RetailCRM, ERP — 1С:Управление торговлей) требует единого API-контракта. REST — стандарт индустрии, но без грамотной схемы он превращается в «зоопарк» эндпоинтов. Используем OpenAPI 3.0 — машиночитаемую спецификацию, которая генерирует клиентскую документацию и валидацию.

Базовые принципы для корпоративных API:

  • Ресурсно-ориентированные URL: /api/v2/orders/{id}, а не /get_order.php.
  • Версионирование через префикс (/v1/, /v2/) — избегаем поломки старых клиентов.
  • Cache-Control на GET-эндпоинтах: max-age=600 для справочников (номенклатура, склады).
  • Content-Type только JSON (application/json) — для корпоративных систем SOAP/XML избыточен.

Пример реального запроса-ответа (сокращённо):

POST /api/v2/orders HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json

{ "external_id": "WX-001", "customer": { "email": "user@example.com", "phone": "+79991234567" }, "items": [ { "sku": "ART-123", "qty": 2, "price": 1500.00 } ] }

Сравнение протоколов обмена данными

ПротоколНазначениеСкоростьБезопасностьКогда использовать
REST API (HTTP/2)Стандартный обмен JSONВысокаяOAuth2 + TLS73% корпоративных интеграций
Async API (RabbitMQ)Асинхронные события (новый заказ)Очень высокаяAMQP + выделенный VhostКогда нужна отказоустойчивость
gRPCВысоконагруженные микросервисыМаксимальнаяmTLSТолько если обе стороны на Go/Java
CommerceML (XML)1С: сайт (обмен каталогом/заказами)СредняяHTTP Basic + шифрованиеНаследие — постепенно заменяем на REST

Аутентификация и авторизация: OAuth2 + JWT

Корпоративное API не может полагаться на Basic Auth (уязвимость к перебору). Стандарт — OAuth2 Authorization Code flow с использованием Keycloak или самописного IdentityProvider. Access-токены — JWT (RFC 7519) с коротким TTL (15 минут) и Refresh-токеном (7 дней).

Пример валидации JWT в Nginx (lua-resty-jwt) — без дополнительных запросов к серверу:

location /api/v2/ {
access_by_lua_block {
local jwt = require("resty.jwt");
local token = ngx.var.http_authorization:match("Bearer% s(.+)");
local obj = jwt:verify("secret-key-hmac", token);
if not obj.verified then ngx.exit(401); end
}
proxy_pass http://backend;

Важно: Никогда не храните секретный ключ в коде. Используйте Vault или Kubernetes Secrets. Для 1С-интеграций часто применяют API-ключи (X-Api-Key), но их обязательно ротировать раз в 30 дней.

Шифрование и политики безопасности

Все запросы — только через HTTPS (TLS 1.3). Дополнительно:

  • Rate Limiting — Nginx limit_req_zone (например, 200 запр/мин на пользователя).
  • IP-белые списки для административных эндпоинтов (PATCH, DELETE).
  • Логирование всех запросов в Elasticsearch (структурированные логи: timestamp, method, user_id, response_code).

Пример конфигурации Nginx для rate limiting:

limit_req_zone $binary_remote_addr zone=api:10m rate=30r/s;
location /api/v2/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://api_backend;

Кэширование и брокеры сообщений

Чтобы сайт и CRM не «дёргали» ERP в реальном времени на каждый чих, используем Redis в качестве кэша для GET-запросов (номенклатура, остатки) с TTL 60–300 секунд. Для асинхронной синхронизации заказов — RabbitMQ с очередями orders.new и Dead Letter Queue для сбоев.

В проектах AVOdigital мы часто ставим промежуточный сервис (Node.js или Go), который:

  1. Принимает запрос от сайта.
  2. Публикует событие в RabbitMQ.
  3. Очередь обрабатывается worker’ом, который пишет в ERP (1С).
  4. Worker отправляет callback через Webhook на сайт (или через тот же API).

Пошаговый чек-лист запуска API

  1. Спецификация OpenAPI — описать все эндпоинты (сущности: заказы, товары, клиенты).
  2. Выбор протокола аутентификации — OAuth2 для публичных клиентов, API-ключ для 1С.
  3. Настройка TLS — сертификат Let's Encrypt (автообновление) + Strong cipher suites.
  4. Rate Limiting и IP-фильтр — на уровне Nginx или AWS WAF.
  5. Кэш Redis — get-запросы с TTL, инвалидация при обновлении в ERP.
  6. Асинхронная очередь — RabbitMQ для операций записи (создание заказа, обновление остатков).
  7. Мониторинг — Prometheus + Grafana (latency, error rate, queue depth).
  8. Документация — Swagger UI + Postman Collection для разработчиков.
  9. Тестирование — нагрузочное (k6) и на отказ (Chaos Engineering).
  10. Развертывание — blue-green или canary через Docker/Kubernetes.

Практические решения от AVOdigital

В одном из проектов (интернет-магазин на WordPress + RetailCRM + 1С:УТ) мы спроектировали API-шлюз, который сократил время синхронизации заказов с 15 минут до 3 секунд. Ключевые решения:

  • Вместо CommerceML с XML-файлами — REST JSON с Webhook-нотификациями.
  • Кэш номенклатуры через Redis на 5 минут — сброс при изменении в 1С.
  • Rate limiting на уровне Nginx — 100 req/s на клиента, burst 200.

Другой пример: интеграция amoCRM c 1С:Бухгалтерия через RabbitMQ. Worker на PHP обрабатывает очередь, при ошибке — retry 3 раза + Dead Letter. Обработка 10 000 заказов в час без потерь.

Мы в AVOdigital гарантируем, что наше API-решение проходит аудит по 152-ФЗ — все персональные данные передаются только через TLS 1.3, логи не содержат ПДн.

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

  1. Какой протокол выбрать для обмена с 1С: CommerceML или REST?
    Если ваша версия 1С старше 8.3.10 — CommerceML неизбежен, но мы рекомендуем ставить REST-прокси между сайтом и 1С. Для новых проектов — только REST JSON, CommerceML используйте только как резервный канал.
  2. Как защитить API от ботов и перебора?
    Обязательно: JWT с коротким TTL, rate limiting (Nginx), блокировка после 5 неудачных попыток, WAF (Cloudflare или ModSecurity). Дополнительно — CAPTCHA на авторизацию.
  3. Сколько времени занимает разработка API для интеграции трёх систем?
    В среднем 2–4 недели на проектирование, спецификацию и ядро, затем ещё 2–6 недель на адаптеры под каждую систему (сайт, CRM, ERP). Итог — 1–2 месяца до production.
  4. Нужно ли оборачивать API в микросервисы?
    Только если нагрузка >10 000 RPS или требуется географическое распределение. Для 90% среднего бизнеса достаточно монолитного API-шлюза с Redis и очередями. Микросервисы добавляют overhead.
Следующий шаг

Соберём структуру корпоративного сайта?

Покажите текущий сайт или презентацию. Определим аудитории, разделы, каталог и интеграции, которые нужны бизнесу.

Как применить это к своему проекту — 3 шага
  1. Опишите задачу бизнеса, которую хотите решить с помощью материала.
  2. Выберите одну страницу или сценарий для первой проверки.
  3. Запишите, что должен сделать посетитель и как вы измерите результат.
Разобрать мой случай →
Обсудить задачуСайт уже есть? Бесплатный экспресс-аудитКорпоративный сайтГайд по корпоративному сайту · PDF
+7 (902) 965-31-60Telegramavodigital@mail.ru

Можно просто задать вопрос — это ни к чему не обязывает

AVOdigital · проект

Обсудим вашу задачу

Оставьте контакт — обсудим задачу и подготовим предложение с составом работ, стоимостью и этапами. Подробности можно сообщить позже.

Нажимая кнопку, вы соглашаетесь с политикой обработки персональных данных.

Гайд AVOdigital

Материал для вашего проекта

Оставьте телефон или email — после отправки здесь появится ссылка на PDF.