Последствия обновления определения сущности WebService - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть WebService, который используется другим приложением для получения данных.Нам нужно добавить новую информацию о найденной сущности.Например, допустим, у вас есть сущность Product, которая предоставляет Name, Price, и вы хотите добавить свойство Provider.

В проведенных мною тестах все кажетсяработает нормально, если я просто обновляю WebService на стороне сервера, но не на стороне клиента: сторона клиента все еще работает, но не имеет доступа к новому свойству, что я и ожидал.

Мой вопрос заключается в следующем: Помимо невозможности получить новые свойства, есть ли скрытый эффект обновления определения сущности на стороне сервера без обновления определения на стороне клиента?

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

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

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

1 - добавить необязательные параметры

Если у вас было getProduct(int id), прежде чем вы изменили бы его на getProduct(int id, bool includeProvider = false) Это позволит вамверните только то, что они ожидают, так как более старый клиент не будет отправлять includeprovider в запросе.

2- Удалите старый вызов и добавьте новый

Добавьте новый метод и удалите старый.

3- Версия вашего веб-сервиса

Продолжайте поддерживать свой веб-сервис, но создайте новый на /v2/<webservice>, чтобы вы могли легко отслеживать клиентов в разных версиях с помощью регистрации.

Я предпочитаю 1 & 3

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

ПРИМЕЧАНИЕ. Если вы предоставите клиенту, мы могли бы лучше знать, как он обрабатывает дополнительные элементы в ответе.

0 голосов
/ 09 декабря 2011

Если вы не удаляете свойства, которые использует клиент (т.е. вы просто добавляете реквизиты), он должен работать. Единственный недостаток - не следовать принципу непрерывной интеграции, и вы будете чувствовать себя очень некомфортно, если будете делать это принудительно несколько раз:)

...