WSDL (WebServicesDescriptionLanguage) - язык описания внешних интерфейсов веб-сервисов на базе XML; Старая версия WSDL 1.1, новая версия WSDL 2.0
В документе wsdl есть один корневой элемент с говорящим названием <wsdl:definitions> и шесть дочерних элементов определенных в пространстве имен wsdl. Один «пассивный» (import это просто ссылка на отдельные документswsdl) и пять активных, которые и составляют описание веб-сервиса:
- <wsdl:import> ссылается на отдельный документ WSDL 1.1 с описаниями, подлежащими включению в этот документ;
- <wsdl:types> определяет типы XML или элементы, используемые для обмена сообщениями;
- <wsdl:message> определяет фактическое сообщение с точки зрения типов или элементов XML;
- <wsdl:portType> определяет абстрактный набор операций, осуществленных сервисом;
- <wsdl:binding> определяет фактическую реализацию <wsdl:portType> с помощью конкретных протоколов и форматов;
- <wsdl:service> определяет сервис в целом, как правило, включая один или несколько элементов <wsdl:port> с информацией доступа для элементов <wsdl:binding>.
Так же существует специальный тег для документирования wsdl документа <wsdl:document> — последовательность как первый дочерний элемент <wsdl:definitions>, а так же предшествующий элемент любого из вышеперечисленных тегов.
Для полного описания сервиса, как правило, требуется, по крайней мере, один элемент каждого из этих типов, за исключением <wsdl:import>, но не обязательно, чтобы все они находились в одном и том же документе. Для сборки полного описания WSDL из нескольких документов можно использовать <wsdl:import>, что позволяет подразделять описания для нужд организации.
Удобно назначать пространство имен для идентификации сервисов и их версий
Тип данных в сообщениях
В WSDL-описаниях разработчик может применять как простые типы, так и составные. Но составные типы, как известно, создаются из простых. Поэтому для начала рассмотрим наиболее часто употребляемые простые типы данных.
1. anyURI. Тип обычно применяется для хранения сетевых идентификаторов URL указывающих на расположение каких-либо ресурсов в Сети.
2. boolean
3. byte. Тип предназначен для хранения целых чисел.
4. date. Тип предназначен для хранения дат
5. DateTime. Значения этого типа хранят не только дату, но и время.
6. double.
7. float.
8. int. Тип используется для представления целочисленных значений
9. language. Тип предназначен для хранения значений, указывающих на язык некоего текстового содержимого.
10. long. Тип также используется для хранения целочисленных значений.
11. negativeInteger. Тип предназначен для хранения отрицательных целочисленных значений.
12. nonnegativeInteger. Тип предназначен для хранения неотрицательных целочисленных значений, то есть положительных чисел и нулевого значения..
13. positiveInteger. Этот тип отличается от предыдущего только тем, что не включает в себя нулевое значение — он предназначен только для положительных целых чисел.
14. short. Это тоже целочисленный тип. Его отличием является то.что для хранения каждого значения отводится два байта.
15. string.. Этот тип предназначен для хранения текстовых строк.
16. time. Этот тип предназначен для хранения значений, указывающих на какое-либо время.
17 unsignedByte. Тип предназначен дня целочисленных значений, как и тип byte, но при этом хранит целые без знаковые числа.
18 unsignedInt. Как и тип int, этот тип хранит целые числа, отводя для них по четыре байта. Отличие заключается в том, что значения этого типа не имеют знака.
19 unsignedLong. Как и тип long, хранит целые числа, отводя дня них по восемь байтов. Отличие заключается в том, что значения этого типа не имеют знака.
20 unsignedShort. Как и тип short, хранит целые числа, отводя для них по два байта. Отличие заключается в том, что значения этого типа не имеют знака.
Теперь предстоит рассмотреть способы образования составных типов. Проше всего увидеть структуру этого механизма на несложном примере.
Предположим, нам необходимо создать составной тип, в котором бы хранилась информация о зарегистрированном пользователе сервиса. Мы будем хранить имя и фамилию человека, а также его возраст в годах. Для этого нам потребуются два поля, приспособленные для хранения строк, и одно поле для хранения целочисленного значения. Тогда конструкция объявления составного типа будет выглядеть следующим образом:
<еlementname=" PERSON " >
<xsd:complexType>
<xsd:seguence>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="ageInYears" type="xsd:int"/>
</xsd:seguence>
</xsd:complexType>
</element>
В спецификации WSDL 1.1 было определено 4 шаблона обмена сообщениями (типы операций):
Однонаправленные операции (One-way): операция может принимать сообщение, но не будет
- возвращать ответ.
- Запрос-ответ (Request-response): операция может принять запрос и должна вернуть ответ.
- Вопрос-ответ (Solicit-response): операция может послать запрос и будет ждать ответ на него.
- Извещение (Notification): операция может послать сообщение, но не будет ожидать ответ.
В версии WSDL 2.0 эти шаблоны изменены и расширены в сторону поддержки сообщений об ошибках (например, шаблон Robust-in-only), но для обратной совместимости поддерживаются типы WSDL 1.1
Веб-сервисы базируются на трех основных веб-стандартах:
- SOAP (SimpleObjectAccessProtocol) — протокол для посылки сообщений по протоколу HTTP и другим Internet-протоколам;
- WSDL (WebServicesDescriptionLanguage) — язык для описания программных интерфейсов веб-сервисов;
- UDDI (Universal Description, Discovery and Integration) — стандартдляиндексациивеб-сервисов.
Существующие веб-сервисы описываются в WSDL-документах, которые располагаются либо на сервере приложений, либо в специальных XML-хранилищах.
SOAP — это стандарт для отсылки и получения сообщений по Internet.
SOAP-сообщения бывают двух типов: запрос (Request) и ответ (Response). Запрос вызывает метод удаленного объекта, ответ возвращает результат выполнения данного метода.
Для того чтобы приложения могли использовать веб-сервисы, программные интерфейсы последних должны быть детально описаны — с этой точки зрения язык WSDL играет ту же роль, что и язык InterfaceDefinitionLanguage (IDL) в распределенных вычислениях. Описание может включать такую информацию, как протокол, адрес сервера, номер используемого порта, список доступных операций, формат запроса и ответа и т.
Рис. 1. Концепция веб-сервиса п.
Структура протокола WSDL