WSDL - Краткое руководство

WSDL означает язык описания веб-служб. Это стандартный формат описания веб-службы. WSDL был разработан совместно Microsoft и IBM.

Особенности WSDL

  • WSDL - это протокол на основе XML для обмена информацией в децентрализованных и распределенных средах.

  • Определения WSDL описывают, как получить доступ к веб-сервису и какие операции он будет выполнять.

  • WSDL - это язык для описания взаимодействия со службами на основе XML.

  • WSDL является неотъемлемой частью универсального описания, обнаружения и интеграции (UDDI), всемирного бизнес-реестра на основе XML.

  • WSDL - это язык, который использует UDDI.

  • WSDL произносится как «глупый» и пишется как «WSD-L».

Использование WSDL

WSDL часто используется в сочетании с SOAP и XML-схемой для предоставления веб-сервисов через Интернет. Клиентская программа, подключающаяся к веб-службе, может читать WSDL, чтобы определить, какие функции доступны на сервере. Любые используемые специальные типы данных встраиваются в файл WSDL в форме XML-схемы. Затем клиент может использовать SOAP для фактического вызова одной из функций, перечисленных в WSDL.

История WSDL

WSDL 1.1 был представлен Ariba, IBM и Microsoft в качестве примечания W3C для описания сервисов W3C XML Activity по протоколам XML в марте 2001 года.

WSDL 1.1 не был одобрен Консорциумом Всемирной паутины (W3C), однако он только что выпустил черновик версии 2.0, который будет рекомендован (официальный стандарт) и, таким образом, одобрен W3C.

WSDL разбивает веб-службы на три конкретных идентифицируемых элемента, которые можно комбинировать или повторно использовать после определения.

Три основных элемента WSDL, которые можно определить отдельно:

  • Types
  • Operations
  • Binding

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

Элементы WSDL

Документ WSDL содержит следующие элементы -

  • Definition- Это корневой элемент всех документов WSDL. Он определяет имя веб-службы, объявляет несколько пространств имен, используемых в оставшейся части документа, и содержит все элементы службы, описанные здесь.

  • Data types - Типы данных, которые будут использоваться в сообщениях, имеют форму XML-схем.

  • Message - Это абстрактное определение данных в форме сообщения, представленного либо как весь документ, либо как аргументы, которые должны быть сопоставлены с вызовом метода.

  • Operation - Это абстрактное определение операции для сообщения, такое как присвоение имени методу, очереди сообщений или бизнес-процессу, который будет принимать и обрабатывать сообщение.

  • Port type- Это абстрактный набор операций, сопоставленных с одной или несколькими конечными точками, определяющий набор операций для привязки; набор операций, поскольку он является абстрактным, может быть отображен на несколько транспортов с помощью различных привязок.

  • Binding - Это конкретный протокол и форматы данных для операций и сообщений, определенные для определенного типа порта.

  • Port - Это комбинация привязки и сетевого адреса, обеспечивающая целевой адрес служебной связи.

  • Service- Это набор связанных конечных точек, охватывающих определения служб в файле; службы отображают привязку к порту и включают любые определения расширяемости.

В дополнение к этим основным элементам спецификация WSDL также определяет следующие служебные элементы:

  • Documentation - Этот элемент используется для предоставления удобочитаемой документации и может быть включен в любой другой элемент WSDL.

  • Import - Этот элемент используется для импорта других документов WSDL или XML-схем.

NOTE - Части WSDL обычно создаются автоматически с использованием инструментов, поддерживающих веб-службы.

Структура документа WSDL

Основная структура документа WSDL выглядит так:

<definitions>
   <types>
      definition of types........
   </types>

   <message>
      definition of a message....
   </message>

   <portType>
      <operation>
         definition of a operation.......  
      </operation>
   </portType>

   <binding>
      definition of a binding....
   </binding>

   <service>
      definition of a service....
   </service>
</definitions>

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

Перейдите к анализу примера документа WSDL.

Ниже приведен файл WSDL, который предназначен для демонстрации простой программы WSDL.

Предположим, служба предоставляет единственную общедоступную функцию, которая называется sayHello . Эта функция ожидает единственный строковый параметр и возвращает однострочное приветствие. Например, если вы передадите параметр world, тогда служебная функция sayHello вернет приветствие «Hello, world!».

пример

Содержимое файла HelloService.wsdl -

<definitions name = "HelloService"
   targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns = "http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
 
   <message name = "SayHelloRequest">
      <part name = "firstName" type = "xsd:string"/>
   </message>
	
   <message name = "SayHelloResponse">
      <part name = "greeting" type = "xsd:string"/>
   </message>

   <portType name = "Hello_PortType">
      <operation name = "sayHello">
         <input message = "tns:SayHelloRequest"/>
         <output message = "tns:SayHelloResponse"/>
      </operation>
   </portType>

   <binding name = "Hello_Binding" type = "tns:Hello_PortType">
      <soap:binding style = "rpc"
         transport = "http://schemas.xmlsoap.org/soap/http"/>
      <operation name = "sayHello">
         <soap:operation soapAction = "sayHello"/>
         <input>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </input>
		
         <output>
            <soap:body
               encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
               namespace = "urn:examples:helloservice"
               use = "encoded"/>
         </output>
      </operation>
   </binding>

   <service name = "Hello_Service">
      <documentation>WSDL File for HelloService</documentation>
      <port binding = "tns:Hello_Binding" name = "Hello_Port">
         <soap:address
            location = "http://www.examples.com/SayHello/" />
      </port>
   </service>
</definitions>

Пример анализа

  • Definitions - HelloService

  • Type - Использование встроенных типов данных, которые определены в XMLSchema.

  • Message -

    • sayHelloRequest - параметр firstName

    • sayHelloresponse - возвращаемое значение приветствия

  • Port Type - операция sayHello, состоящая из службы запроса и ответа.

  • Binding - Направление использования транспортного протокола SOAP HTTP.

  • Service - Сервис доступен по адресу http://www.examples.com/SayHello/

  • Port - Связывает привязку с URI http://www.examples.com/SayHello/, по которому можно получить доступ к работающей службе.

В <definitions>Элемент должен быть корневым элементом всех документов WSDL. Он определяет имя веб-службы.

Вот фрагмент кода из последней главы, в котором используется элемент определений .

<definitions name="HelloService"
   targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   ................................................
</definitions>

Из приведенного выше примера мы можем сделать вывод, что определения -

  • является контейнером для всех остальных элементов.

  • указывает, что этот документ называется HelloService .

  • указывает атрибут targetNamespace . Целевое пространство является условностью XML - схема , которая позволяет документ WSDL ссылаться на себя. В этом примере мы указали targetNamespace http://www.examples.com/wsdl/HelloService.wsdl.

  • задает пространство имен по умолчанию: xmlns = http: //schemas.xmlsoap.org/wsdl/. Следовательно , все элементы без префикса пространства имен, такие как message или portType , считаются частью пространства имен WSDL по умолчанию.

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

NOTE- Спецификация пространства имен не требует, чтобы документ присутствовал в данном месте. Важным моментом является то, что вы указываете уникальное значение, отличное от всех других определенных пространств имен.

Веб-сервис должен определить свои входы и выходы, а также то, как они отображаются в сервисах и из них. WSDL<types>element заботится об определении типов данных, используемых веб-службой. Типы - это XML-документы или части документа.

  • Элемент types описывает все типы данных, используемые между клиентом и сервером.

  • WSDL не привязан исключительно к определенной системе типизации.

  • WSDL использует спецификацию схемы XML W3C как свой выбор по умолчанию для определения типов данных.

  • Если служба использует только встроенные простые типы XML-схемы, такие как строки и целые числа, тогда элемент types не требуется.

  • WSDL позволяет определять типы в отдельных элементах, чтобы эти типы можно было повторно использовать в нескольких веб-службах.

Вот фрагмент кода, взятый из спецификации W3C. Этот код показывает, как элемент типов может использоваться в WSDL.

<types>
   <schema targetNamespace = "http://example.com/stockquote.xsd"
      xmlns = "http://www.w3.org/2000/10/XMLSchema">
		
      <element name = "TradePriceRequest">
         <complexType>
            <all>
               <element name = "tickerSymbol" type = "string"/>
            </all>
         </complexType>
      </element>
		
      <element name = "TradePrice">
         <complexType>
            <all>
               <element name = "price" type = "float"/>
            </all>
         </complexType>
      </element>
		
   </schema>
</types>

Типы данных решают проблему идентификации типов данных и форматов, которые вы собираетесь использовать со своими веб-службами. Информация о типе разделяется между отправителем и получателем. Поэтому получателям сообщений необходим доступ к информации, которую вы использовали для кодирования данных, и они должны понимать, как их декодировать.

В <message> Элемент описывает данные, которыми обмениваются поставщики веб-сервисов и потребители.

  • Каждая веб-служба имеет два сообщения: входное и выходное.

  • Входные данные описывают параметры веб-службы, а выходные данные - данные, возвращаемые веб-службой.

  • Каждое сообщение содержит ноль или более <part> параметры, по одному для каждого параметра функции веб-службы.

  • Каждый <part> параметр связан с конкретным типом, определенным в <types> контейнерный элемент.

Давайте возьмем фрагмент кода из главы примера WSDL -

<message name = "SayHelloRequest">
   <part name = "firstName" type = "xsd:string"/>
</message>

<message name = "SayHelloResponse">
   <part name = "greeting" type = "xsd:string"/>
</message>

Здесь определены два элемента сообщения. Первый представляет сообщение запроса SayHelloRequest , а второй представляет сообщение ответа SayHelloResponse .

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

В <portType> element объединяет несколько элементов сообщения для формирования полной односторонней или двусторонней операции.

Например, <portType>может объединить один запрос и одно сообщение ответа в одну операцию запроса / ответа. Это наиболее часто используется в службах SOAP. PortType может определять несколько операций.

Давайте возьмем фрагмент кода из главы примера WSDL -

<portType name = "Hello_PortType">
   <operation name = "sayHello">
      <input message = "tns:SayHelloRequest"/>
      <output message = "tns:SayHelloResponse"/>
   </operation>
</portType>
  • Элемент portType определяет одну операцию под названием sayHello .

  • Операция состоит из одного входного сообщения SayHelloRequest и

  • выходное сообщение SayHelloResponse .

Образцы работы

WSDL поддерживает четыре основных шаблона работы:

В одну сторону

Сервис получает сообщение. Таким образом, операция имеет единственный входной элемент. Грамматика односторонней операции -

<wsdl:definitions .... > 
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:input name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Ответ на запрос

Сервис получает сообщение и отправляет ответ. Таким образом, операция имеет один входной элемент, за которым следует один выходной элемент. Чтобы инкапсулировать ошибки, можно также указать необязательный элемент ошибки . Грамматика для операции запрос-ответ -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

Запрос-ответ

Сервис отправляет сообщение и получает ответ. Таким образом, операция имеет один выходной элемент, за которым следует один входной элемент. Чтобы инкапсулировать ошибки, можно также указать необязательный элемент ошибки . Грамматика для операции запроса-ответа -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
         <wsdl:output name = "nmtoken"? message = "qname"/>
         <wsdl:input name = "nmtoken"? message = "qname"/>
         <wsdl:fault name = "nmtoken" message = "qname"/>*
      </wsdl:operation>
   </wsdl:portType >
</wsdl:definitions>

Уведомление

Сервис отправляет сообщение. Таким образом, операция имеет единственный выходной элемент. Ниже приводится грамматика операции уведомления -

<wsdl:definitions .... >
   <wsdl:portType .... > *
      <wsdl:operation name = "nmtoken">
         <wsdl:output name = "nmtoken"? message = "qname"/>
      </wsdl:operation>
   </wsdl:portType>
</wsdl:definitions>

В <binding>element предоставляет конкретные детали того, как операция portType будет фактически передаваться по сети.

  • Привязки могут быть доступны через несколько транспортов, включая HTTP GET, HTTP POST или SOAP.

  • Привязки предоставляют конкретную информацию о том, какой протокол используется для передачи операций portType .

  • Привязки предоставляют информацию о расположении службы.

  • Для протокола SOAP привязка <soap:binding>, а транспорт - это сообщения SOAP поверх протокола HTTP.

  • Вы можете указать несколько привязок для одного portType .

Элемент привязки имеет два атрибута: имя и атрибут типа .

<binding name = "Hello_Binding" type = "tns:Hello_PortType">

Имя атрибута определяет имя связывания, а также тип атрибута указывает на порт для связывания, в этом случае «TNS: Hello_PortType» порт.

Привязка SOAP

WSDL 1.1 включает встроенные расширения для SOAP 1.1. Он позволяет указывать конкретные детали SOAP, включая заголовки SOAP, стили кодирования SOAP и заголовок HTTP SOAPAction. Элементы расширения SOAP включают следующее:

  • soap:binding
  • soap:operation
  • soap:body

мыло: связующее

Этот элемент указывает, что привязка будет доступна через SOAP. Стиль атрибута указывает на общий стиль формата SOAP сообщения. Значение стиля rpc определяет формат RPC.

Транспортный атрибут указывает на перенос сообщений SOAP. Значение http://schemas.xmlsoap.org/soap/http указывает транспортный протокол SOAP HTTP, тогда как http://schemas.xmlsoap.org/soap/smtp указывает транспортный протокол SOAP SMTP.

мыло: операция

Этот элемент указывает на привязку конкретной операции к конкретной реализации SOAP. В SOAPAction атрибут указывает , что SOAPAction HTTP заголовок, используемый для идентификации сервиса.

мыло: тело

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

Вот фрагмент кода из главы примера -

<binding name = "Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
			
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

А <port> Элемент определяет отдельную конечную точку, указывая единственный адрес для привязки.

Вот грамматика для указания порта -

<wsdl:definitions .... >
   <wsdl:service .... > *
      <wsdl:port name = "nmtoken" binding = "qname"> *
         <-- extensibility element (1) -->
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
  • Элемент порта имеет два атрибута: имя и привязку .

  • Имя атрибут обеспечивает уникальное имя среди всех портов , определенных в документе вшита WSDL.

  • Атрибут привязки относится к привязке с использованием правил связывания, определенных WSDL.

  • Элементы расширяемости привязки используются для указания адресной информации для порта.

  • Порт НЕ ДОЛЖЕН указывать более одного адреса.

  • Порт НЕ ДОЛЖЕН указывать какую-либо информацию привязки, кроме информации об адресе.

Вот фрагмент кода из главы Пример -

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

В <service>определяет порты, поддерживаемые веб-службой. Для каждого из поддерживаемых протоколов существует один элемент порта. Сервисный элемент - это набор портов.

  • Клиенты веб-службы могут узнать следующее из элемента службы:

    • где получить доступ к услуге,
    • через какой порт получить доступ к веб-службе, и
    • как определяются коммуникационные сообщения.
  • Сервисный элемент включает элемент документации, обеспечивающий удобочитаемую документацию.

Вот фрагмент кода из главы Пример -

<service name = "Hello_Service">
   <documentation>WSDL File for HelloService</documentation>
   <port binding = "tns:Hello_Binding" name = "Hello_Port">
      <soap:address
         location = "http://www.examples.com/SayHello/">
   </port>
</service>

Атрибуты привязки элемента порта связывают адрес службы с элементом привязки, определенным в веб-службе. В этом примере это Hello_Binding

<binding name =" Hello_Binding" type = "tns:Hello_PortType">
   <soap:binding style = "rpc"
      transport = "http://schemas.xmlsoap.org/soap/http"/>
   <operation name = "sayHello">
      <soap:operation soapAction = "sayHello"/>
		
      <input>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </input>
			
      <output>
         <soap:body
            encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
            namespace = "urn:examples:helloservice" use = "encoded"/>
      </output>
   </operation>
</binding>

В этом руководстве мы рассмотрели основы WSDL. Следующим шагом будет изучение SOAP, UDDI и веб-служб.

Веб-сервисы

Веб-службы - это открытые стандартные веб-приложения (XML, SOAP, HTTP и т. Д.), Которые взаимодействуют с другими веб-приложениями с целью обмена данными.

Чтобы узнать больше о веб-службах, посетите Учебное пособие по веб-службам.

UDDI

UDDI - это стандарт на основе XML для описания, публикации и поиска веб-сервисов.

Чтобы узнать больше о UDDI, посетите UDDI Tutorial.

МЫЛО

SOAP - это простой протокол на основе XML, который позволяет приложениям обмениваться информацией через HTTP.

Чтобы узнать больше о SOAP, посетите Учебное пособие по SOAP.

Если вы хотите разместить свою компанию, веб-сайт или книги в качестве ресурса WSDL, свяжитесь с нами по адресу [email protected].

Список спецификаций WSDL

Specification Draft / Proposal W3C Recommendation
     
WSDL 1.1 Примечание

15 марта 2001 г.

 
Сценарии использования WSDL

04. июн 2002 г.

 
Требования WSDL

28 октября 2002 г.

 
Архитектура WSDL

11 февраля 2004 г.

 
Глоссарий WSDL

11 февраля 2004 г.

 
Сценарии использования WSDL

11 февраля 2004 г.

 
Базовый язык WSDL 1.2

11 июня 2003 г.

 
Шаблоны сообщений WSDL 1.2

11 июня 2003 г.

 
Привязки WSDL 1.2

11 июня 2003 г.

 
Праймер WSDL 2.0

27 марта 2006 г.

 
Базовый язык WSDL 2.0

27 марта 2006 г.

 
Дополнения к WSDL 2.0

27 марта 2006 г.

 
Привязка WSDL 2.0 SOAP 1.1

27 марта 2006 г.

 
Отображение RDF в WSDL 2.0

18. мая 2006 г.

 
Ядро адресации WS  

09. мая 2006 г.

Привязка SOAP с адресацией WS  

09. мая 2006 г.

Веб-архитектура  

15. декабря 2004 г.