Может API в SOAP/WSDL быть сохраненным назад совместимым легко?

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

Например:

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

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

5
задан Dimitri C. 4 February 2010 в 11:39
поделиться

2 ответа

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

Редактировать :

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

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

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

3
ответ дан 14 December 2019 в 13:36
поделиться

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

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

3
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: