Привет, Хабр! По нашему опыту, при разработке интеграционного взаимодействия труднее всего даётся сопоставление различных форматов данных интегрируемых систем — «маппинг». Для этого нужно проанализировать много форматов, выявить корректные связи между элементами XSD- или JSON-схем и описать правила преобразования. Работа кропотливая, трудозатратная и не самая интересная. Раньше нам приходилось вручную сводить в таблицах поля, сидеть ночами. Думаю, все аналитики с этим сталкиваются и понимают, о чём я говорю.
Меня зовут Ярослав, я техлид в Т1 Иннотех. Наша команда занимается интеграцией всевозможных систем и разработкой ядра интеграционной платформы. За последние три года мы успешно заменили решение на стеке IBM MQ и IBM App Connect (бывший IBM Integration BUS) на open-source решение на основе ActiveMQ Artemis в качестве транспорта, с использованием Java и Kubernetes, и перенесли более 1500 различных способов взаимодействий на новую платформу. Хочу поделиться с вами нашим опытом по автоматизации этой работы и обсудить получившийся инструмент.
В чём ключевая сложность?
На первый взгляд, нет ничего сложного в сопоставлении нескольких полей данных между разными форматами. Но это лишь пока количество полей в XSD- или JSON-схеме не превышает нескольких десятков, а интегрируемых сервисов мало. Но когда численность сервисов переваливает за сотни и тысячи, а некоторые схемы форматов данных содержат сотни полей, сложность задачи вырастает экспоненциально. Добавьте к этому недоступность привычных инструментов, сложность структур данных, человеческий фактор, частое обновление версий форматов и проектной документации, — и получите нескончаемый поток редактирования документов. Вас обошла эта проблема? Значит, вы — счастливчик. И всё же, я верю, многие согласятся с тем, что такая проблема существует и её стоит решать.
Собственный продукт для маппинга
Мы пробовали различные подходы к маппингу. Сначала делали вручную в таблицах Excel или документах Word, безо всякой автоматизации. Сопоставление форматов разных систем для одного интеграционного сервиса могло занимать у нашего аналитика целый день. И это никак не гарантировало отсутствия ошибок, которые потом по цепочке доставались разработчикам. Им, в свою очередь, приходилось вручную переносить описание маппинга в код. А тестировщикам приходилось вручную составлять примеры сообщений для тестов.
Потом мы стали использовать Altova Map Force и Oxygen. Они справлялись с большинством задач, хотя имели некоторые ограничения. Но главным недостатком была значительная стоимость. Регулярно не хватало лицензий, приходилось ожидать закупок. А затем начался отказ от зарубежного проприетарного ПО. И тут выяснилось, что подходящих российских решений для работы с XML- и JSON-схемами просто нет.
Всё это побудило нас создать собственный инструмент, удобный для нашей команды. Так появился XJProfessor. C этим названием, кстати, связана забавная история. Сначала мы хотели назвать продукт XJProcessor, однако кто-то опечатался, и незапланированное XJProfessor попало во множество документов и презентаций. В итоге решили так и оставить.
Функциональность
XJProfessor написан с использованием Electron, Vue.js, Spring Boot, D3, Java. Его основная задача — максимально упростить для аналитика и разработчика маппинг форматов, снизить трудозатраты и минимизировать ошибки. Мы опирались на свой опыт решения подобных задач и использования подобных продуктов. Проводили исследования и опрашивали коллег из различных подразделений. То есть постарались собрать в одном продукте все необходимые для нашей работы фичи.
В первых версиях XJProfessor позволял в графическом интерфейсе создавать, сохранять и дорабатывать маппинги между форматами JSON и XSD. Сегодня его возможности шире:
Просмотр схем в виде деревьев, настройка отображаемых в дереве параметров (описание полей, тип, длина и т. д.).
Разработка сопоставлений между форматами JSON, XSD и OpenAPI.
Сохранение сопоставлений в файле для последующих доработок.
Сравнение JSON‑ и XSD‑схем.
Генерация документации по маппингам (выгрузка в виде таблиц для вставки в документацию).
Генерация примеров сообщений по схемам. Также генерация схем в формате CSV и HTML.
Генерация кода по разработанным сопоставлениям на различных языках. В данный момент это XSLT, Java, C# и Groovy.
Версии под Windows и Linux.
Так выглядит интерфейс сопоставления:
Можно проверять на корректность, инструмент покажет ошибки:
Можно генерировать документацию в виде таблиц и вставлять их в Confluence, различные ТЗ и архитектуры:
И в итоге сгенерировать основу кода для маппинга на актуальных для нас языках программирования:
Дополнительно можно сравнивать схемы и генерировать по ним примеры:
Генерация примера по схеме:
Результаты и преимущества
Использование XJProfessor позволило до 5 раз ускорить реализацию новых интеграционных потоков. Если раньше практически всегда в больших сопоставлениях были какие-то неточности, при тестировании обнаруживались ошибки, то сейчас всё наоборот. Ошибиться по невнимательности в анализе и разработке стало практически невозможно благодаря удобному графическому интерфейсу. К тому же, XJProfessor умеет анализировать сопоставления на наличие ошибок, а разработчику не нужно вручную копировать названия полей из документации. Также это избавило аналитиков и разработчиков от однотипных объёмных задач: всё-таки заниматься механическим перебором сотен реквизитов в десятках сервисов довольно утомительно. Для нас это один из главных результатов внедрения инструмента.
Перспективы
В планах у нас:
Улучшить интерфейс. Когда XJProfessor создавали, его визуал был не на первом месте. Нужно было срочно делать проекты и новые интеграции, а для этого в первую очередь наращивали функциональность. Сейчас мы привлекли коллег‑дизайнеров.
Собрать веб-версию. Пока продукт реализован как десктопное приложение. В будущем мы видим XJProfessor как SaaS‑решение. Продукт можно будет встраивать в корпоративные инструменты для аналитиков и разработчиков.
Добавить режим многопользовательской работы.
Добавить поддержку сопоставления нескольких схем одновременно на одном экране.
Добавить поддержку DBT (data build tool).
Также размышляем над автоматической генерацией документации на основании программного кода, и рассматриваем создание полноценного IDE для работы с XSD‑ и JSON‑схемами.
А как вы работаете с маппингами?
Если у вас есть опыт работы с маппингами, расскажите о нём. Нам очень интересно, как коллеги-аналитики решают свои задачи. Также будем рады отзывам и предложениям по продукту. Можете писать в наш Telegram-канал.
А если хотите протестировать инструмент, то вот ссылка на небольшую анкету. Всем заполнившим — бесплатное использование XJProfessor до конца 2024 года :)
RRVS
Спасибо, очень интересно. Первый раз слышу про Altova Map Force.