Одно из наиболее частых возражений против использования ESB-слоя в архитектуре компании или отдельного проекта — независимые системы можно связать и без «посредников». Достаточно разработать в одной из этих систем модуль интеграции или использовать, к примеру, API.
Давайте рассмотрим эти варианты подробнее.
Первый вариант — модуль интеграции в одной из систем. Как правило, его разработку делегируют команде, которая непосредственно занимается разработкой этой системы. Для такой команды разработка интеграций — задача непрофильная, связанная с рисками, например, наделать неочевидных ошибок в интеграции, потратить значительно больше времени, чем запланировано, совершить архитектурные ошибки.
Плюс команде разработки придётся делать «обвязку» системы, чтобы контролировать работоспособность интеграции. А это непростая и объёмная задача. Нужно не только разработать интеграцию, которая работает без сбоев, но и дать команде поддержки понятные регламенты работы с теми сбоями, которые всё же могут возникнуть.
И даже если интеграция работает здесь и сейчас, нет никакой гарантии, что она будет работать завтра. И тем более нет гарантии, что команда разработки узнает об «отвалившейся» интеграции раньше, чем к ней придёт заказчик с претензией: «У меня не работает обмен данными».
Второй вариант — передача данных через интерфейс API или, к примеру, GraphQL. Тут есть нюанс: API, который система использует для обмена данными с внешним миром, пассивен. Система может только отвечать на запросы — отдавать данные вовне или изменять их по «инициативе» другой системы.