Надёжная интеграция начинается не с первого запроса, а с контракта: какие сущности передаются, кто является источником истины, какой ключ защищает от дублей и что происходит при ошибке.
Успешный ответ на одном тестовом запросе ещё не означает, что обмен готов к работе. Системы временно недоступны, справочники расходятся, события приходят повторно или не по порядку. Поэтому проектируют не только «счастливый путь», но и восстановление после ожидаемых сбоев.
Как спроектировать интеграцию по API?
- Описать бизнес-событие и владельца результата.
- Определить систему-источник для каждой сущности.
- Согласовать поля, форматы, статусы и версии контракта.
- Выбрать синхронный запрос, событие или пакетный обмен.
- Добавить внешние ID и защиту от повторной обработки.
- Настроить ограниченные повторы и очередь ошибок.
- Разделить технические и бизнесовые ошибки.
- Проверить доступы, журнал и восстановление на пилоте.
Что такое API и чего оно не решает?
API описывает, как обратиться к системе: какой адрес и метод использовать, какие данные передать и какой ответ получить. Это упрощает связь сервисов, но не определяет бизнес-смысл полей и не устраняет расхождения автоматически.
| API помогает | Нужно спроектировать отдельно |
|---|---|
| Получить и изменить разрешённые данные | Кто владеет клиентом, ценой или статусом |
| Получить машинно-читаемый ответ | Что делать при частичном успехе |
| Ограничить операции и доступ | Как исключить дубли и конфликт версий |
| Автоматизировать регулярный обмен | Кто разбирает бизнесовые ошибки |
Если у старой системы нет подходящего API, сравнивают выгрузки, прямой обмен, RPA и доработку. Выбор зависит от частоты, критичности и доступности системы.
Можно ли интегрировать именно ваши системы?
Возможность интеграции по API лучше проверять до оценки разработки. Названия двух сервисов недостаточно: один и тот же продукт может предоставлять разные методы, права и лимиты в зависимости от версии или тарифа.
- есть актуальная документация с примерами запросов, ответов и ошибок;
- доступны методы для нужных сущностей и действий, а не только чтение справочников;
- можно выдать отдельные минимальные права технической учётной записи;
- известны лимиты запросов, объёмы страниц и правила повторов;
- есть вебхуки или другой способ узнавать об изменениях без постоянного опроса;
- предоставлен тестовый контур или безопасные тестовые данные;
- понятны версии API, сроки их поддержки и журнал изменений;
- определены состав персональных данных, место хранения и правила доступа.
Это не всегда означает отказ от проекта. Можно рассмотреть пакетный обмен, штатный коннектор, ограниченный RPA-сценарий или доработку одной из систем — с явным описанием компромиссов.
Что должно быть в контракте данных?
Контракт фиксирует не только названия полей. Он объясняет их смысл, обязательность, формат, допустимые значения и реакцию на несовместимую версию.
- сущность и событие: клиент создан, заказ изменён, платёж подтверждён;
- уникальный ID события и внешний ID записи;
- время события, часовой пояс и версия данных;
- обязательные и необязательные поля;
- закрытые справочники и допустимые статусы;
- формат ошибки с кодом и понятным описанием;
- правила обратной совместимости и вывода старой версии;
- пример корректного запроса, ответа и отказа.
Поле «status» может означать статус заказа, оплаты или доставки. Совпадение названий между системами не подтверждает совпадение бизнес-смысла.
Как выбрать REST API, вебхуки, OData или пакетный обмен?
| Способ | Когда подходит | Ограничение |
|---|---|---|
| REST API | Система должна читать или менять ресурсы по запросу: клиентов, заказы, товары, статусы | Нужны документация, права, версии и обработка кодов ответа |
| Вебхук | Источник должен сообщить об изменении сразу после события | События могут повторяться, запаздывать или приходить не по порядку |
| OData | Нужен стандартный доступ к опубликованной модели данных, в том числе в поддерживающих его решениях 1С | Доступность объектов, операций и производительность зависят от публикации и конфигурации |
| Очередь сообщений | Нужно развязать системы и сохранить операции при временной недоступности | Требует контроля задержки, повторов и необработанных сообщений |
| Пакет или файл | Допустим обмен большим объёмом по расписанию | Изменения и ошибки обнаруживаются позже |
Способы можно сочетать: например, вебхук сообщает о заказе, REST API получает детали, а очередь сохраняет операцию до подтверждения учётной системой. Для критичного действия ответ должен сообщать только то, что система действительно завершила.
Как выглядит интеграция сервисов по API на практике?
| Сценарий | Что передаём | Что обязательно проверить |
|---|---|---|
| Сайт → CRM | Заявку, источник, согласие, выбранную услугу и внешний ID формы | Защиту от повторной отправки, назначение ответственного и ответ пользователю |
| CRM ↔ 1С | Контрагента и заказ из CRM; оплату, документы и остатки из учётной системы | Владельца каждого поля, справочники, внешние ID и правила конфликта |
| Маркетплейс → учётная система | Заказы, товары, цены, остатки и статусы в пределах доступных методов площадки | Лимиты API, пагинацию, задержку данных, токены и сверку итогов |
Для обмена CRM и учётной системы есть отдельный разбор интеграции CRM с 1С. Если штатного API недостаточно, сравните RPA и API до выбора технологии.
Как защититься от дублей?
Сеть может оборваться после выполнения операции, но до получения ответа. Отправитель повторит запрос, поэтому принимающая сторона должна узнать уже обработанную операцию.
- Создать уникальный ключ бизнес-операции.
- Передавать его при каждом повторе того же действия.
- Хранить результат обработки ключа ограниченное время.
- Возвращать прежний результат без второго изменения.
- Связывать внешние ID записей обеих систем.
- Отдельно решать настоящий повтор бизнеса и технический повтор доставки.
Номер телефона, имя клиента или сумма не подходят как единственный ключ. Они могут совпадать у разных операций.
Как настроить ошибки и повторы?
Повторять стоит временные технические сбои, но не ошибку бизнес-правила. Неверный реквизит не станет правильным через минуту, а недоступный сервис может восстановиться.
| Тип ошибки | Реакция |
|---|---|
| Таймаут или временная недоступность | Ограниченный повтор с увеличением интервала |
| Ограничение частоты | Соблюсти указанный интервал и замедлиться |
| Неверный формат | Не повторять, отправить на исправление |
| Не найден справочник | Очередь бизнесовой сверки |
| Нет прав | Остановить поток и уведомить владельца доступа |
| Конфликт версии | Перечитать запись и применить правило конфликта |
Бесконечный повтор маскирует проблему и создаёт нагрузку. После лимита сообщение попадает в отдельную очередь с причиной и безопасным способом перезапуска.
Как ограничить доступ интеграции?
- отдельная техническая учётная запись, а не логин сотрудника;
- минимальный набор методов, сущностей и полей;
- короткоживущие токены, когда платформа их поддерживает;
- секреты вне исходного кода, логов и интерфейса;
- проверка подписи входящих вебхуков;
- ограничение источника и частоты запросов;
- регулярная смена ключей и процедура отключения;
- аудит операций, выполненных интеграцией.
Доступ на чтение и изменение разделяют. Если обмен только создаёт заявку, ему не нужны права на выгрузку всей клиентской базы.
Как сопоставить данные разных систем?
Сначала определяют источник истины для каждого атрибута. Например, реквизиты ведёт учётная система, а этап продажи хранит CRM. Двустороннее изменение одного поля без приоритета создаёт цикл конфликтов.
| Вопрос | Решение в проекте |
|---|---|
| Кто создаёт сущность? | Одна система или согласованное правило |
| Кто меняет поле? | Владелец атрибута и разрешённые исключения |
| Как связать записи? | Таблица внешних ID, не поиск по названию |
| Что делать с удалением? | Архив, запрет или отдельное подтверждение |
| Как обновлять справочник? | Версия, расписание и обработка неизвестного кода |
| Что важнее при конфликте? | Явный приоритет и журнал решения |
Практический пример такого разделения есть в материале про интеграцию CRM с 1С.
Что контролировать после запуска?
- число успешных, ошибочных и отложенных операций;
- возраст самого старого сообщения в очереди;
- время ответа и долю таймаутов;
- повторы, дубли и конфликты версий;
- ошибки по коду, системе и типу сущности;
- срок действия токенов и сертификатов;
- расхождение контрольных итогов между системами;
- время от ошибки до восстановления потока.
Уведомление должно вести к конкретной операции и понятному действию. Сообщение «интеграция сломалась» без ID и причины увеличивает простой.
Как проверить интеграцию на пилоте?
- 01
Одна сущность
Выбрать ограниченный поток с измеримым результатом.
- 02
Контракт
Согласовать поля, статусы, ID и ошибки.
- 03
Негативные сценарии
Проверить дубли, таймауты, неверные данные и права.
- 04
Остановка
Убедиться, что очередь сохраняется и восстанавливается.
- 05
Сверка
Сопоставить записи и контрольные суммы двух систем.
- 06
Приёмка
Передать журнал, инструкции и ответственность владельцам.
Что нужно для оценки разработки интеграции по API?
Универсальная цена по названиям систем будет неточной. Для диагностики достаточно передать исходную схему процесса и восемь параметров:
- названия, версии и документацию систем;
- сущности и поля, которые должны участвовать в обмене;
- направление для каждой сущности: в одну сторону или в обе;
- частоту, объём и допустимую задержку;
- требуемый уровень доступности и время восстановления;
- ошибки, которые должен исправлять человек, и правила повторов;
- требования к доступу, персональным данным и аудиту;
- ответственность за обновления API и поддержку версий после запуска.
После короткой диагностики можно разделить оценку на исследование API, разработку обмена, тестирование негативных сценариев, запуск и сопровождение. Сравнить состав бюджета поможет статья о стоимости автоматизации, а возможный контур реализации показан на странице заказной разработки.
Частые вопросы
Что такое интеграция по API простыми словами?
Это согласованный способ, по которому одна система запрашивает или передаёт другой системе структурированные данные и получает понятный результат.
Чем API лучше обмена файлами?
API подходит для более оперативного и управляемого обмена, но требует доступного интерфейса и обработки ошибок. Файлы остаются уместны для пакетных операций и систем без подходящего API.
Нужен ли промежуточный сервис?
Он полезен, когда систем несколько, нужны очереди, преобразование форматов, журнал и независимые повторы. Для простого устойчивого обмена двух систем отдельный слой может быть лишним.
Почему после повтора появляются дубли?
Если запрос создаёт запись повторно и не содержит устойчивого ключа операции, система воспринимает повтор как новое действие. Нужны идемпотентность и сопоставление внешних ID.
Как проверить интеграцию перед запуском?
Прогнать обычные случаи, ошибки валидации, недоступность одной стороны, повтор запроса, нарушение порядка событий и восстановление после остановки.
Источники и границы материала
- Microsoft Azure Architecture Center: проектирование веб-API
- RFC 9110: семантика HTTP
- OASIS: спецификация OData 4.01
- 1С:Предприятие: REST-интерфейс и OData
- Wildberries: общая документация WB API
- AWS: retry with backoff pattern
- OWASP API Security Top 10, редакция 2023
Материал носит информационный характер. Конкретная архитектура, бюджет, режим работы с данными и уровень человеческого контроля зависят от процесса и требований компании.
Спроектируйте один устойчивый обмен
Покажите системы, сущности и проблемный ручной переход. Мы поможем описать контракт, ошибки, журнал и границы пилота.
