Проектируем не только happy path
Для устойчивого обмена заранее определяем: что отправляем, какой системе доверяем, как валидируем ответ, что происходит при ошибке и можно ли безопасно повторить операцию.
Связываем сайты, CRM, личные кабинеты, SaaS, интернет-магазины, внутренние системы и внешние сервисы. Проектируем передачу данных через API и webhooks, синхронизацию, авторизацию, обработку ошибок, повторные попытки и контроль критических операций.
Цель — не создать ещё одну копию данных, а организовать понятный обмен между существующими системами.
Заявки, контакты, источники, формы, статусы и другие данные передаются в CRM автоматически.
Пользователь видит актуальные заявки, сделки, статусы и документы из основной бизнес-системы.
Каталог, товары, заказы, остатки, цены и статусы могут синхронизироваться между системами.
Подключаем сторонние функции, данные и рабочие процессы к web-продукту.
Получение статуса операции, обработка событий и обновление состояния заказа или аккаунта.
Обмен данными между корпоративными сервисами, базами, приложениями и внутренними интерфейсами.
Production-интеграция должна учитывать, что внешний сервис может отвечать медленно, временно быть недоступен или вернуть неожиданные данные.
Для устойчивого обмена заранее определяем: что отправляем, какой системе доверяем, как валидируем ответ, что происходит при ошибке и можно ли безопасно повторить операцию.
API keys, tokens, OAuth или другой механизм, который поддерживает нужный сервис.
Сопоставляем поля, сущности, статусы и идентификаторы между системами.
Проверяем обязательные значения, формат и допустимые данные перед следующим действием.
Обрабатываем отказ, timeout, некорректный ответ и другие технические ошибки.
Для допустимых операций можно предусмотреть контролируемые повторные попытки.
Фиксируем ключевые события и ошибки, чтобы интеграцию можно было диагностировать.
Иногда CSV действительно достаточно. API нужен там, где данные должны обмениваться системно и без постоянной ручной операции.
Подходит, если обновления редкие, объём ограничен и реального времени не требуется.
Нужен, когда системы должны регулярно получать, отправлять или синхронизировать данные.
До разработки определяем источник истины, направление обмена, события, идентификаторы и ожидаемое поведение при ошибках.
Определяем сущности, поля и владельца данных.
Настраиваем безопасный способ обращения к API.
Request, response, webhooks и mapping.
Timeout, retry, invalid data и fallback.
Тестируем обычные и аварийные сценарии.
Если сервис поддерживает webhooks, система может реагировать на событие после его возникновения.
Новая заявка запускает создание сущности в нужной системе.
Изменение статуса операции обновляет заказ или аккаунт.
Событие заказа передаётся в кабинет, CRM или другой сервис.
Изменение во внешней системе запускает следующий workflow.
Если одно поле можно менять одновременно в трёх системах, без правил легко получить конфликтующие данные.
Для каждого типа данных определяем: где он создаётся, где редактируется, куда передаётся и что происходит при конфликте версий.
Одна система является источником, другая получает актуальную копию.
Изменения могут идти в обе стороны по заранее заданным правилам.
Связываем сущности через стабильные идентификаторы, а не только по названию.
Определяем, какая система имеет приоритет при несовпадении данных.
Если задача позволяет, передаём только изменившиеся данные, а не весь объём каждый раз.
Интеграция не должна ломать весь пользовательский сценарий из-за одной неудачной попытки.
Запрос не должен бесконечно ждать внешний сервис.
Для допустимых сценариев можно настроить контролируемую повторную попытку.
Повторный запрос не должен случайно создавать несколько одинаковых операций.
Ошибка должна быть зафиксирована и доступна для диагностики.
При необходимости проектируем альтернативный сценарий или ручную обработку.
Поэтому credentials, permissions и критические операции нельзя рассматривать как обычные frontend-настройки.
Для интеграции используем только необходимые права, проверяем входящие данные и отделяем серверные credentials от публичного frontend. Конкретный механизм зависит от API подключаемого сервиса.
Возможность интеграции зависит не только от нас, но и от того, какой интерфейс предоставляет подключаемая система.
Пришлите названия сервисов, которые должны обмениваться данными, и опишите, что именно должно происходить: какие данные передавать, в каком направлении и после какого события. На этой основе определим архитектуру интеграции и состав первой версии.