Какой подход к веб-сервисам лучше: контракт сначала или контракт последним? - PullRequest
12 голосов
/ 18 апреля 2009

Какой подход лучше для разработки веб-сервисов; первый контракт или последний контракт?
Каковы преимущества и недостатки каждого?

С чем у вас есть опыт?

EDIT Этот вопрос касается реализации веб-сервиса (читай: SOAP) Вопрос заключается в том, следует ли сначала кодировать классы реализации, а схему WSDL и XSD, сгенерированную из этого (последний контракт), или записать сначала схему WSDL и XSD, а сгенерировать классы реализации (сначала контракт)

Ответы [ 3 ]

8 голосов
/ 20 апреля 2009

Первый контракт - общепринятая «лучшая практика».

Это дает вам понять как производителю, так и потребителю услуги, что именно нужно и что ожидается. Это становится особенно важным, когда вы начинаете пытаться конвертировать java-типы -> xml-типы. Вы также можете повторно использовать схемы в разных веб-сервисах.

6 голосов
/ 01 октября 2010

Я использовал оба подхода. Я предлагаю использовать схему контракт сначала , но код сначала WSDL.

Написание файла WSDL имеет много странных нюансов, таких как привязки, порты и тому подобное. Я бы предпочел сделать это с помощью инструментов, а не вручную. Для этого есть инструменты, но ни один из них не проще, чем

@WebService
public ...

По крайней мере, вы можете проверить свое развертывание.

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

Еще одним преимуществом использования схемы в качестве контракта является наличие инструментов для преобразования файла схемы в документацию HTML.

Инструмент XJC может генерировать необходимые файлы классов. Тем не менее, я бы рекомендовал делать это только при запуске.

В конце вы должны взять сгенерированный файл WSDL и поработать с ним. Таким образом, вы можете использовать wsimport и убедиться, что все от WSDL до Schema допустимо.

Вы можете развернуть файл WSDL с помощью атрибута wsdlLocation в реализации @WebService, и сервер приложений будет фиксировать данные привязки для вас, когда пользователи запрашивают WSDL с сервера, но вы все равно сохраняете свои аннотации. В противном случае ваши аннотации не будут отображаться в запрошенных файлах WSDL.

0 голосов
/ 19 апреля 2009

Я подозреваю, что ответ является определенным "это зависит."

Проблема в том, что если вы создаете и публикуете свой контракт, вы обязаны его соблюдать. Это делает изменения сложнее. не невозможно, но сложнее.

С другой стороны, с контрактом быстрее связываться с контрактом, чем с кодом, если вас устраивают схемы и т. Д. Таким образом, вы можете вносить некоторые изменения в контракт.

Нет ли также инструментов, которые будут генерировать скелет кода из WSDL? Я почти уверен, что есть. Если это так, вы можете сделать схемы «элементом кода» и сгенерировать из них код.

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