Привет, Хабр! По нашему опыту, при разработке интеграционного взаимодействия труднее всего даётся сопоставление различных форматов данных интегрируемых систем — «маппинг». Для этого нужно проанализировать много форматов, выявить корректные связи между элементами 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. Сегодня его возможности шире:

  1. Просмотр схем в виде деревьев, настройка отображаемых в дереве параметров (описание полей, тип, длина и т. д.).

  2. Разработка сопоставлений между форматами JSON, XSD и OpenAPI.

  3. Сохранение сопоставлений в файле для последующих доработок.

  4. Сравнение JSON‑ и XSD‑схем.

  5. Генерация документации по маппингам (выгрузка в виде таблиц для вставки в документацию).

  6. Генерация примеров сообщений по схемам. Также генерация схем в формате CSV и HTML.

  7. Генерация кода по разработанным сопоставлениям на различных языках. В данный момент это XSLT, Java, C# и Groovy.

  8. Версии под Windows и Linux.

Так выглядит интерфейс сопоставления:

Можно проверять на корректность, инструмент покажет ошибки:

Можно генерировать документацию в виде таблиц и вставлять их в Confluence, различные ТЗ и архитектуры:

И в итоге сгенерировать основу кода для маппинга на актуальных для нас языках программирования:

Дополнительно можно сравнивать схемы и генерировать по ним примеры:

Генерация примера по схеме:

Результаты и преимущества

Использование XJProfessor позволило до 5 раз ускорить реализацию новых интеграционных потоков. Если раньше практически всегда в больших сопоставлениях были какие-то неточности, при тестировании обнаруживались ошибки, то сейчас всё наоборот. Ошибиться по невнимательности в анализе и разработке стало практически невозможно благодаря удобному графическому интерфейсу. К тому же, XJProfessor умеет анализировать сопоставления на наличие ошибок, а разработчику не нужно вручную копировать названия полей из документации. Также это избавило аналитиков и разработчиков от однотипных объёмных задач: всё-таки заниматься механическим перебором сотен реквизитов в десятках сервисов довольно утомительно. Для нас это один из главных результатов внедрения инструмента.

Перспективы

В планах у нас:

  • Улучшить интерфейс. Когда XJProfessor создавали, его визуал был не на первом месте. Нужно было срочно делать проекты и новые интеграции, а для этого в первую очередь наращивали функциональность. Сейчас мы привлекли коллег‑дизайнеров.

  • Собрать веб-версию. Пока продукт реализован как десктопное приложение. В будущем мы видим XJProfessor как SaaS‑решение. Продукт можно будет встраивать в корпоративные инструменты для аналитиков и разработчиков.

  • Добавить режим многопользовательской работы.

  • Добавить поддержку сопоставления нескольких схем одновременно на одном экране.

  • Добавить поддержку DBT (data build tool).

Также размышляем над автоматической генерацией документации на основании программного кода, и рассматриваем создание полноценного IDE для работы с XSD‑ и JSON‑схемами.

А как вы работаете с маппингами?

Если у вас есть опыт работы с маппингами, расскажите о нём. Нам очень интересно, как коллеги-аналитики решают свои задачи. Также будем рады отзывам и предложениям по продукту. Можете писать в наш Telegram-канал.

А если хотите протестировать инструмент, то вот ссылка на небольшую анкету. Всем заполнившим — бесплатное использование XJProfessor до конца 2024 года :)

Комментарии (1)


  1. RRVS
    12.07.2024 07:21

    Спасибо, очень интересно. Первый раз слышу про Altova Map Force.