Как обрабатывать код для версий SOAP-сервисов?
Фон:
- наши веб-сервисы являются внутренними компаниями, но с использованием различных систем, использующих их.
- мы будем стремиться к тому, чтобы обезопасить/удалить старые версии api, насколько мы можем
Существует много информации о версировании веб-сервисов, и мы решили использовать следующий подход к версии наших веб-сервисов:
- Сохраняйте версию в URL-адресе (я знаю, что некоторые люди против этого, но главным образом в отношении сервисов REST).
- Сохранять версию в пространстве имен.
Но теперь мы решаем, как реально реализовать это, и здесь мы не нашли много информации о лучших практиках. Мы используем (Java):
- Аннотации для определения наших веб-сервисов (и веб-службы api)
- POJO beans, аннотированный аннотациями XML, для определения содержимого
- Преобразование классов для конвертирования с/на бизнес-уровень и веб-службы pojos
- Spring
Итак, чтобы сохранить старые версии в веб-службах, нам нужно сохранить старые версии кода. Для этого мы в основном рассмотрели два разных подхода:
1) Для каждой новой версии создайте полную новую копию соответствующего кода
Этот подход будет выглядеть следующим образом:
com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here
Итак, здесь мы дублируем код. Короче говоря:
- Дублирование кода. Будет несколько классов с одинаковым кодом. Возможно, запутано в Eclipse.
- Полная изоляция, легко определить, что составляет определенную версию.
- Минимальный риск, влияющий на функциональность предыдущих версий служб.
2) Используйте spring, чтобы делать только копию каждого класса, на которую влияет изменение
Этот подход означает, что используйте spring IoC и пусть все версии веб-служб используют, насколько это возможно, один и тот же код. Только когда мы делаем изменения, которые влияют на поведение /api, мы создаем новые версии этих классов. Например:
com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
- Может быть трудно четко видеть, что представляет собой конкретную версию веб-службы. Может быть, проще по сравнению с предыдущими версиями веб-сервисов при сохранении кода.
- Нет дублирования кода. Только изменения реализованы как новые классы
Ни один подход не кажется оптимальным, но мы не нашли много информации об этом.
Итак, мои вопросы:
какой из двух подходов вы бы использовали? Или вы возьмете совершенно другой подход?
Ответы
Ответ 1
При создании wsdls из Java я бы использовал решение пакета:
com.company.webservice.v3.
У него есть проблема с дублированием кода, но POJO и конвертеры имеют различия между версиями anymay, поэтому повторное использование кода может быть не совсем выполнимо в конце концов. Главное преимущество заключается в том, что если вы хотите избавиться от старой версии, вы просто удалите соответствующие пакеты.
Я бы сохранил номер версии в URL-адресе, так как вы все равно не выполняете REST. Кроме того, вы можете проверить журналы доступа, если некоторые версии все еще используются.