Как обрабатывать код для версий 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. Кроме того, вы можете проверить журналы доступа, если некоторые версии все еще используются.