
Если вы работаете с веб-сервисами, существует несколько различных важных методик. Наряду с SOAP и REST, одной из них является язык описания WSDL. Он служит для описания функций веб-сервиса, чтобы другие участники сети также могли использовать эти сервисы. Как работает этот язык, для чего именно нужен WSDL-файл и какие связи существуют с другими языками?
Что такое WSDL?
WSDL расшифровывается как язык описания веб-служб. Это метаязык, с помощью которого можно всесторонне описать веб-сервисы. В свою очередь, веб-сервис — это услуга, которую сервер предоставляет клиентам через Интернет (или другую сеть). Это происходит независимо от платформы, между различными системами и приложениями. WSDL-файл доступен на сервере, чтобы клиент мог узнать о возможностях и процедурах веб-сервиса. Детали, приведенные в файле, указывают клиенту, как получить доступ к веб-сервису.
WSDL использует расширяемый язык разметки (XML) или схему XML (XSD) в качестве своей основы. Это означает, что в WSDL используются элементы XML.
WSDL стандартизирован Консорциумом Всемирной паутины (W3C).
Структура и свойства WSDL
WSDL использует абстрактные и конкретные описания для описания веб-сервисов. В то время как абстрактное описание относится к функциональности сервиса, конкретное описание передает четкие факты, такие как протокол передачи данных. Документ (т.е. файл WSDL) имеет иерархическую структуру. Поэтому информация вложена друг в друга.
WSDL принимает шесть основных элементов из XML:
- типы: типы данных
- сообщения: описание данных, которые должны быть переданы
- интерфейс: абстрактные операции, описывающие взаимодействие между сервером и клиентом (в старой версии стандарта еще назывался portType)
- привязка: информация об используемом транспортном протоколе
- конечная точка: информация об интерфейсе связи, обычно в виде URI (в старой версии стандарта все еще называлась портом)
- сервис: точки доступа веб-сервиса
Заполнив все элементы в файле, клиент получает всю информацию, необходимую для использования веб-сервиса. Именно поэтому веб-сервис является платформонезависимым, так как различные системы получают общий язык через WSDL-файл.
WSDL: пример
Структура WSDL-файла будет описана ниже более подробно на примере. Следующий код предназначен для веб-службы, которая возвращает простое сообщение «Hello World».
<?xml version="1.0"?>
<definitions name="HelloWorld"
targetNamespace="http://example.com/helloworld.wsdl"
xmlns:tns="http://example.com/helloworld.wsdl"
xmlns:xsd1="http://example.com/helloworld.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema targetNamespace="http://example.com/helloworld.xsd"
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="HelloWorldElement">
<complexType>
<all>
<element name="worldRequest" type="string"/>
</all>
</complexType>
</element>
</schema>
</types>
<message name = "HelloWorldRequest">
<part name = "name" type = "xsd:string"/>
</message>
<message name = "HelloWorldResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<interface name = "HelloWorld_Interface">
<operation name = "sayHelloWorld">
<input message = "tns:HelloWorldRequest"/>
<output message = "tns:HelloWorldResponse"/>
</operation>
</interface>
<binding name = "HelloWorld_Binding" type = "tns:HelloWorld_Interface">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHelloWorld">
<soap:operation soapAction = "sayHelloWorld"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloworld"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_World">
<documentation>WSDL File for HelloWorld</documentation>
<endpoint binding = "tns:HelloWorld_Binding" name = "HelloWorld_Endpoint">
<soap:address
location = "http://www.example.com/HelloWorld/" />
</endpoint>
</service>
</definitions>
В примере исходного кода хорошо видны отдельные компоненты WSDL-файла. После начального введения, которое также включает ссылку на WSDL и XSD, следуют абстрактные описания типов, сообщений и интерфейса. Вторая половина состоит из конкретных описаний, где конечная точка включена в сервис.