Веб-сервис на корпоративной шине добавил два новых обязательных поля. Что сломается и что придётся изменить в интеграции?
Веб-сервис, интегрированный через корпоративную сервисную шину (ESB), добавил два новых обязательных поля — taxId и consentGiven — в контракт запроса. Теперь он отклоняет любой запрос, где их нет.
Ограничения:
- Системы-источники по-прежнему публикуют сообщение ниже и ничего не знают о новых полях.
- Шина выполняет преобразование сообщения и маршрутизацию по содержимому между сторонами.
- Оба новых поля обязательны — запрос без них сервис отклоняет.
{
"customerId": "C-1001",
"fullName": "Ivan Petrov",
"email": "ivan@example.com"
}
Определите, что сломается в этой интеграции, и опишите, что именно и где придётся изменить.
Теперь каждое сообщение падает у приёмника: сервис отклоняет запросы без двух обязательных полей, хотя источники не менялись. Исправьте, обновив маппинг на шине для поставки полей, подняв версию контракта и обновив потребителей и тесты. Выкатывайте с обратной совместимостью.
- ✗Считать, что шина сама заполняет пропущенные обязательные поля
- ✗Менять только источник, пропуская маппинг на шине
- ✗Выкатывать без подъёма версии и обратной совместимости
- →Откуда шина может взять значения новых полей?
- →Как не потерять сообщения в пути во время изменения?
Что происходит: обязательное поле, которого нет в сообщении, — это провал валидации на стороне сервиса-приёмника. Ломается не источник, а обмен: taxId и consentGiven отсутствуют, и сервис отклоняет каждый запрос, хотя системы-источники не менялись.
Что и где изменить:
- На шине — обновить маппинг и преобразователь сообщений, чтобы новые поля наполнялись: значением от источника, если он его знает, либо обогащением из справочной системы, если нет.
- Поднять версию контракта и схемы (WSDL/XSD или JSON Schema), задокументировать новые поля как обязательные.
- Обновить валидацию, потребителей и тесты; согласовать источник данных для
consentGivenс бизнесом. - Выкатывать с обратной совместимостью и обработкой сообщений в пути, чтобы ничего не потерять.
{
"customerId": "C-1001",
"fullName": "Ivan Petrov",
"email": "ivan@example.com",
"taxId": "7701234567",
"consentGiven": true
}