WSDL
WSDL (Web Services Description Language) — это язык описания веб-сервисов на основе XML, предназначенный для формального описания интерфейсов, доступных через сеть. WSDL определяет, как обращаться к веб-сервису, какие операции он поддерживает, какие типы данных используются для обмена сообщениями и по какому сетевому протоколу (например, SOAP, HTTP) происходит взаимодействие. Стандарт разработан консорциумом W3C (World Wide Web Consortium) и является ключевым компонентом архитектуры SOA (Service-Oriented Architecture).
История и развитие
Первая версия WSDL (1.0) была предложена компаниями IBM и Microsoft в 2000 году и базировалась на более ранних форматах, таких как NASSL (IBM) и SOAP Contract Language (Microsoft). Однако эта версия не была принята W3C в качестве рекомендации. Основная версия, WSDL 1.1, была опубликована в марте 2001 года и получила широкое распространение в индустрии, став де-факто стандартом для описания веб-сервисов на основе SOAP.
В 2004 году W3C начал работу над стандартизацией WSDL 2.0, которая была завершена в 2007 году (статус W3C Recommendation). Версия 2.0 внесла значительные изменения: была упрощена модель описания, введены новые элементы для поддержки REST-подобных сервисов, улучшена поддержка не-SOAP протоколов. Однако, из-за обратной несовместимости с WSDL 1.1 и отсутствия массового перехода на новую версию, WSDL 1.1 остаётся наиболее широко используемой на практике.
Структура WSDL-документа
WSDL-документ представляет собой XML-файл, который состоит из нескольких основных элементов (в версии 1.1):
<definitions>— корневой элемент документа, содержащий объявления пространств имён и всю структуру.<types>— описание типов данных, используемых в сообщениях. Обычно типы определяются с помощью XML Schema Definition (XSD), что обеспечивает строгую типизацию.<message>— определение сообщений, которые передаются между клиентом и сервером. Каждое сообщение состоит из одной или нескольких частей (частей), каждая из которых ссылается на тип данных из блока<types>.<portType>(в WSDL 2.0 —<interface>) — абстрактное определение набора операций, предоставляемых сервисом. Каждая операция имеет входное (input) и/или выходное (output) сообщение, а также может содержать сообщения об ошибках (fault).<binding>— связывание абстрактного интерфейса (<portType>) с конкретным протоколом и форматом данных (например, SOAP over HTTP, MIME). В этом разделе указываются детали кодирования сообщений, стиль вызова (RPC или document), транспортный протокол и другие параметры.<service>— определение точки доступа к веб-сервису. Содержит элемент<port>, который ссылается на конкретный<binding>и указывает URL (адрес) конечной точки (endpoint), по которому клиент может обратиться к сервису.
Особенности WSDL 2.0
В версии 2.0 структура была переработана: элементы <portType> и <binding> заменены на <interface> и <binding> соответственно, а <service> остаётся, но <port> заменён на <endpoint>. Кроме того, в WSDL 2.0 появилась возможность описывать сервисы, не использующие SOAP, например, RESTful сервисы на HTTP с использованием методов GET, POST, PUT, DELETE.
Принципы использования
WSDL используется для автоматической генерации кода клиентских и серверных приложений. Разработчик может взять WSDL-документ, опубликованный поставщиком сервиса, и с помощью инструментов (например, wsimport в Java или svcutil в .NET) сгенерировать заглушки для вызова операций, не вникая в детали протокола и сериализации данных.
Процесс взаимодействия с веб-сервисом на основе WSDL включает следующие шаги:
- Клиент получает WSDL-документ (обычно по URL, завершающемуся на
?wsdl). - Клиент анализирует WSDL, определяет операции, их параметры и точки доступа.
- Клиент формирует SOAP-сообщение (или сообщение по другому протоколу) согласно описанию в WSDL.
- Сообщение отправляется на указанный endpoint.
- Сервер обрабатывает запрос и возвращает ответ, структура которого также задана WSDL.
Пример WSDL-документа (упрощённый)
Ниже приведён фрагмент WSDL-документа версии 1.1, описывающего простой сервис получения информации о погоде:
``xml <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/weather"> <types> <xsd:schema targetNamespace="http://example.com/weather"> <xsd:element name="GetWeatherRequest" type="xsd:string"/> <xsd:element name="GetWeatherResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="Temperature" type="xsd:double"/> <xsd:element name="Condition" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </types> <message name="GetWeatherInput"> <part name="parameters" element="tns:GetWeatherRequest"/> </message> <message name="GetWeatherOutput"> <part name="parameters" element="tns:GetWeatherResponse"/> </message> <portType name="WeatherPortType"> <operation name="GetWeather"> <input message="tns:GetWeatherInput"/> <output message="tns:GetWeatherOutput"/> </operation> </portType> <binding name="WeatherBinding" type="tns:WeatherPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetWeather"> <soap:operation soapAction="http://example.com/weather/GetWeather"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="WeatherService"> <port name="WeatherPort" binding="tns:WeatherBinding"> <soap:address location="http://example.com/weather"/> </port> </service> </definitions> ``
Связь с другими технологиями
WSDL тесно связан с такими стандартами, как:
- SOAP (Simple Object Access Protocol) — протокол обмена структурированными сообщениями в распределённой среде. Большинство WSDL-документов описывают сервисы, использующие SOAP.
- XML Schema (XSD) — используется в блоке
<types>для определения типов данных, используемых в сообщениях. - UDDI (Universal Description, Discovery, and Integration) — реестр веб-сервисов, где можно публиковать и находить WSDL-документы. На практике UDDI не получил широкого распространения.
- REST (Representational State Transfer) — WSDL 2.0 позволяет описывать REST-сервисы, но для REST чаще используются другие форматы описания, такие как OpenAPI (OAS) или RAML.
Критика и альтернативы
Основные недостатки WSDL связаны со сложностью и громоздкостью XML-структуры, а также с ориентацией на SOAP-сервисы, которые в последние годы уступают позиции подходам REST и gRPC. Критики отмечают избыточность и трудоёмкость создания и сопровождения WSDL-документов вручную. Кроме того, использование WSDL часто приводит к сильной связности клиента и сервера через общие типы данных и протоколы, что противоречит принципам слабой связанности REST.
Альтернативными форматами описания сервисов являются:
- OpenAPI 3.x (ранее Swagger) — популярный стандарт для описания RESTful API на JSON или YAML.
- GraphQL — язык запросов и описания данных, не требующий отдельного файла с описанием интерфейса, но имеющий встроенную систему типов.
- gRPC (HTTP/2 + Protocol Buffers) — альтернатива SOAP, где описание сервиса задаётся в файлах .proto, а не в XML.
Тем не менее, WSDL остаётся важным стандартом в корпоративных системах, где используются SOAP-сервисы и подходы SOA, особенно в финансовом и телекоммуникационном секторах.
Применение в России
В России WSDL применяется в промышленных интеграционных проектах, использующих платформы Oracle SOA Suite, IBM WebSphere, SAP PI/PO и другие. Также WSDL используется при описании интерфейсов государственных информационных систем, например, в рамках системы межведомственного электронного взаимодействия (СМЭВ) для описания сервисов обмена данными между органами власти.
Источники:
- W3C Recommendation: Web Services Description Language (WSDL) 1.1 (2001)
- W3C Recommendation: Web Services Description Language (WSDL) Version 2.0 (2007)
- Книга: "Web Services: Principles and Technology" by Michael P. Papazoglou
- Документация к платформам Oracle SOA Suite и SAP NetWeaver
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →