Подтвердить что ты не робот

REST против эволюции SOAP

Я получаю преимущества изменения uris ссылки, но это действительно не то, о чем этот вопрос.

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

SOAP не так уж плох, поскольку сообщество REST имеет тенденцию говорить об этом, когда дело доходит до эволюционируемости. Например:

  • В REST мы можем добавить новый rel-in SOAP, мы можем добавить новый метод. И то и другое типы старых клиентов будут продолжать работать с новыми услугами.
  • В REST мы можем добавить новое поле формы и установить значение по умолчанию - в SOAP, мы могли бы использовать аргументы службы как некоторые классы ServiceArgs и добавьте новое поле в ServiceArgs. Это уродливо, но оно работает.

Каковы примеры эволюции, когда клиенты SOAP ломаются, и вы ничего не можете с этим поделать, в то время как клиенты REST обрабатывают ситуацию изящно?

Спасибо!

4b9b3361

Ответ 1

SOAP - это контрактная технология. Все взаимодействие между клиентом и сервером записывается и кодируется в большом документе (WSDL) и должно быть согласовано и соблюдено обеими сторонами для того, чтобы все работало. Если какая-либо сторона решает добавить функции, другая сторона должна "развиваться" с блокировкой с ней. Обе стороны полностью связаны, соединены в бедро, склеены, женаты, навсегда.

Типичным подходом к расширению ваших SOAP-сервисов является создание новых документов WSDL для новых версий службы, а также сохранение старых. Другой способ - создать новый интерфейс, чтобы содержать новые методы и наследовать от старого. Подход, который вы описываете в № 1, - это ИМО, нарушающая правила SOAP, поскольку клиент и сервер теперь будут использовать разные контракты, и это работает только потому, что изменения additive (например, новые методы) могут быть обучены и в большинстве случаев все будет работать. В тот момент, когда кто-то делает деструктивное изменение, то клиентский контракт не будет соответствовать серверу, и игра закончится. Это сложный процесс управления, поэтому большинство организаций предпочитают создавать совершенно новые WSDL для каждой новой версии API.

REST не волшебным образом устраняет все эти проблемы, но упрощает управление , не заставляя вас связывать весь ваш контракт с распределенной системой в один артефакт. Вы используете HTTP? Отлично, тогда вы можете использовать все замечательные функции HTTP, которые использует сеть: прокси-серверы, URL-адреса, согласование контента, аутентификация и т.д. Вы хотите общаться с использованием JSON-кодирования, а также XML? Выбейте себя. В любое время это невозможно сделать в REST, не затрагивая существующих клиентов. Вам нужна безопасность? Хорошо, начните оспаривать аутентифицированные учетные данные, используя встроенную поддержку HTTP именно для этого. Все эти вещи (HTTP, JSON и т.д.) Стандартизированы и описаны в разных местах и ​​точно как это должно быть.

SOAP объединяет протокол передачи, информацию о местоположении, описание полезной нагрузки, выбор кодировки и методы RPC в один ginormous документ. Если вы хотите внести какие-либо изменения в что-либо в этом списке, вам нужен новый документ. Хуже того, некоторые из этих вещей не могут быть изменены вообще.

REST отделяет эти вещи так, что куски могут развиваться независимо. Ваши URL-адреса (или "URI", если быть более точными) возвращаются во время выполнения и предполагая, что клиент не начинает их жестко кодировать, могут быть изменены без каких-либо изменений, необходимых для клиент. Аддитивные изменения в ваших типах носителей тривиальны, если в вашей документации ясно, что новые поля могут появиться в будущем. У вас также есть возможность управлять версиями ваших медиа-типов, позволяя сосуществовать с типами носителей v1/v2/v3... внутри вашей системы, и клиент может выбрать (используя заголовки Accept и Content-Type в HTTP), который они хотят использовать.

Когда-либо слышал анекдот о владельце Porsche, который покупает новый автомобиль всякий раз, когда пепельница заполняется? Это SOAP. То, что должно быть тривиальным изменением, требует капитального ремонта. REST дает вам пылесос. Вам не обязательно использовать его, но он уверен, что он дешевле.