Почему люди не делают WSDL-сначала?
В настоящее время я делаю презентацию, посвященную веб-сервисам.
Мы создали наш сервис с использованием подхода WSDL+XSD-first, в котором мы сначала создали (с помощью инструментов) схему XSD и WSDL, а затем скомпилировали оба класса.NET и Java для взаимодействия.
Я хочу обосновать, почему мы использовали этот подход. Я упомянул, что он более совместим с ООП (сначала определите интерфейс, затем реализацию, а не наоборот), и что у вас больше контроля над ограничениями взаимодействия. Кроме того, вы можете явно определить пространства имен и помочь повторно использовать XSD в разных приложениях.
Напротив, сегодня многие люди предпочитают реализовывать код в своей IDE и генерировать оттуда WSDL. Вопрос в том, почему?
5 ответов
Оба стиля разработки имеют свои преимущества и недостатки, но я не думаю, что последний контракт используется в большей степени только потому, что, как вы говорите, он проще и быстрее для новичков, а главным образом потому, что по мере развития инструментов и сред WSDL быстро перешел в каталогизированное код сантехники, цитата:
[...] закулисный низкоуровневый код, который соединяет приложение и нижние уровни. Кодирование этого материала часто довольно скучно и повторяется, но это необходимо для того, чтобы система работала.
Никто не хочет писать скучный, повторяющийся код, особенно когда есть много инструментов и структур, которые могут сделать это для вас. Если вам даже не нужно понимать SOAP, WSDL или XSD, это даже лучше для некоторых... или я должен сказать "волшебство"... но это другое обсуждение:).
Я не согласен - я думаю, что это связано с выражением контракта, а не с легкостью разработки.
И я думаю, что WSDL должен генерироваться из.xsd.
На странице веб-службы Spring есть хорошее обсуждение веб-сервисов "сначала контракт". Прочтите это и посмотрите, что вы думаете.
Когда я создаю веб-сервисы (в основном мы используем JBoss, в котором есть хорошая встроенная система веб-сервисов), я всегда определяю взаимодействия сначала в общем смысле, но не в XML, мне не особенно нравится писать сам XML. Это уродливый, многословный язык. Итак, что я делаю, так это отображаю свои ответы и параметры как объекты Java, затем соответствующим образом аннотирую их, а затем, как только я разверну приложение, у меня волшебным образом будет веб-сервис без необходимости писать XML. WSDL и XSD довольно многословны, и то, что JBoss генерирует для меня, не лучше, чем то, что мне приходилось писать самому, и, возможно, это экономит много времени. Вам не обязательно реализовывать сервис в этот момент, просто структуры ответа и входных данных. И тогда вы можете взять тот wsdl, который он генерирует для вас, и использовать любой инструмент, который вы хотите генерировать объекты, которые нужны клиенту.
Есть несколько веских причин никогда не использовать Contract-First.
Портативность
Один из них заключается в том, что вы полагаетесь на то, что создаваемый wsdl может быть использован многими различными источниками. Обычно wsdl, сгенерированный Visual Studio или Apache CXF, вызывает проблемы.
Реализация SOAP компанией Sun имеет тенденцию генерировать wsdl, которые содержат «параметр» в качестве имени части сообщения, даже несмотря на то, что это вызывает ошибку, когда Visual Studio пытается использовать службу как веб-ссылку. Реализация Visual Studio также имеет известные особенности, которые в некоторых ситуациях приходится настраивать вручную тем, кто использует их сервисы.
На самом деле и Java, и C# предлагают способы замены автоматически сгенерированного wsdl вручную настроенным.
Стабильность
Contract-Last означает, что ваш код генерирует контракт. Это также означает, что становится все труднее избежать ошибочного изменения API. Если, с другой стороны, вы сами создаете WSDL (это не сложно) и пишете XSD (это тоже несложно — и, на мой взгляд, это легче сделать правильно, чем классы JAXB в Java), то вы обеспечить выполнение контракта. Это явно, когда контракт изменяется.
Версии
Так как в Contract-First изменение контракта является явным, вы можете затем указать его версию в пространстве имен, и это означает, что становится очень ясно, когда отправляются разные версии. Таким образом можно предотвратить попытки устаревших клиентов использовать новые сообщения, что может быть полезно, если вы внесли критические обновления.
Это может сэкономить много человеко-часов.
Не уверен, что мой ответ является единственным ответом, но это то, что я знаю
Потому что это проще и быстрее для начинающих разработчиков
Просто людям не нравится изучать новые языки, но они предпочитают использовать те, на которых владеют, независимо от того, будет ли их продукт работать с клиентом с другой платформы