Можно ли легко поддерживать API в SOAP / WSDL обратно совместимым? - PullRequest
5 голосов
/ 29 января 2010

При использовании библиотеки IPC важно, чтобы она обеспечивала возможность взаимодействия как клиента, так и сервера, даже если их версия API отличается. Поскольку я рассматриваю возможность использования SOAP для нашего клиент-серверного приложения, мне интересно, может ли решение SOAP / WSDL хорошо справляться с изменениями API.

Например:

  • Добавление параметров к существующим функциям
  • Добавление переменных к существующим структурам, которые используются в существующих функциях
  • Удаление функций
  • Удаление параметров из существующих функций
  • Удаление переменных из существующих структур, которые используются в существующих функциях
  • Изменение типа параметра, используемого в существующей функции
  • Изменение порядка параметров в существующей функции
  • Изменение порядка составных деталей в существующей структуре
  • Переименование существующих функций
  • Параметры переименования

Примечание : под "struct" я подразумеваю составной тип

Ответы [ 2 ]

3 голосов
/ 29 января 2010

Насколько я знаю, в соответствии со стандартом SOAP / WSDL таких вещей нет. Но существуют инструменты, чтобы справиться с такими проблемами. Например, в Glassfish вы можете указать таблицу стилей XSL для преобразования запроса / ответа веб-службы. Другие решения, такие как Oracle SOA, предлагают гораздо более сложные инструменты для управления версиями веб-службы и интеграции компонентов вместе. Сообщение может быть перенаправлено автоматически на другую версию веб-службы и / или преобразовано . Вам нужно будет проверить, что предлагает ваша целевая инфраструктура.

EDIT

XML и XSD более гибки в отношении эволюции схемы, чем типы и сериализация в объектно-ориентированных языках. Некоторые вещи можно сделать обратно совместимыми, просто объявив их как необязательные, например,

  • Добавление параметров к существующим функциям - если параметр является необязательным, вы получаете значение null, если клиент не отправляет его
  • Добавление переменных к существующей структуре, которые используются в существующих функциях - если значение является необязательным, вы получите null, если клиент его не предоставит
  • Удаление функций - здесь нет волшебства
  • Удаление параметров из существующих функций - параметры, отправленные клиентом, будут лишними в соответствии с новым определением и будут опущены
  • Удаление переменных из существующей структуры, которые используются в существующих функциях - в этом случае я не знаю
  • Изменение типа параметра, используемого в существующей функции - это зависит от изменения. Для простого типа сериализация / десериализация может все еще работать, например, Строка в int.

Обратите внимание, что я не уверен на 100% в списке. Но несколько тестов могут показать вам, что работает, а что нет. Дело в том, что XML отправляется по проводам, что дает некоторую гибкость.

3 голосов
/ 29 января 2010

Это не так. Вам придется как-то управлять этим вручную. Как правило, путем создания нового интерфейса при внесении основных / критических изменений.

В общем, это скорее архитектурная проблема, чем техническая. После публикации интерфейса вам действительно нужно подумать о том, как обрабатывать изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...