Поднятый вопрос на самом деле очень распространен для любой системы, построенной на основе SOA.Обычно у вас есть несколько потребителей WSDL или несколько служб, использующих тот же WSDL, и теперь WSDL необходимо обновить.
- Нужно ли обновлять все клиенты и сервер одновременно (это дорого!)
- Если мы выполняем поэтапное развертывание, на какие операции в WSDL влияют (не работают)) если обновленный клиент вызывает необновленную службу?
- И наоборот, могут ли некоторые клиенты быть обновлены позже?
- Как изменяется структура XML?Могут ли эти изменения допускаться некоторыми парсерами (например, некоторые парсеры не ломаются, если они находят новый элемент в конце последовательности, но ломаются, если он находится в середине).
И нет, ни diff для WSDL, ни diff для сгенерированного XML не могут надежно помочь.
В дополнение к изменениям схемы WSDL может изменить структуру структурированной полезной нагрузки (тело / заголовок), кодирование / квалификацию, действие SOAPсвойства привязки - любое из которых может привести к потере совместимости.
Чтобы сделать вещи еще более хитрыми, некоторые типы изменений, внесенных во входные данные, нарушают сценарий «обновлен до старого», тогда как в выходных данных они должны бытьсчитается неразрушающим.Например, новый необязательный элемент в запросе сломал бы старый сервис, если он будет пройден, но тот же элемент в ответе не будет сгенерирован старым сервисом (потому что он не знает об этом), и отсутствие элемента будет допущенообновленный клиент, поскольку элемент является необязательным.
Моя команда сталкивается с этими задачами не раз в неделю.Вплоть до недавнего времени мы делали ручную разметку файлов WSDL / схемы и пытались выяснить влияние.Иногда это очевидно, но иногда наш подход приводил к ошибкам.Нам нужен был лучший способ.
Мембранный SOA помог.К сожалению, в некоторых случаях он не может обнаружить изменения в схеме, ошибочно сообщая об операции как не затронутой, хотя на самом деле она не работает.Из вывода также не сразу понятно, о каком сценарии («старый в обновленный» или «обновленный в старый») сообщается.
Так что после нескольких лет боли мне пришлось написать собственный код, который отвечаетПриведенные выше вопросы я могу напрямую предоставить нашим BA / PM в качестве подтверждающей документации для оценки воздействия.
См. здесь: https://wsdldiff.mockmotor.com/
- Загрузите ваш WSDL и схемы:
Служба предоставит вам сводку воздействия: нарушаются ли изменения и какой сценарий развертывания будет затронут:
Каждая операция помечается как имеющая разрывное или неразрывное изменение как портов, так и привязок:
Вы можете взглянуть на детали критического изменения (то есть, какое изменение схемы / wsdl вызывает это).Вот, например, обязательный элемент был добавлен в середину последовательности:
Это не означает, что следует слепо полагаться на такие инструменты, как этот,но при оценке воздействия это экономит много времени.