WSDL-описание
WSDL (Web Services Description Language) — это язык описания веб-сервисов, основанный на XML. Он используется для определения интерфейса, доступного через сеть, включая форматы сообщений, типы данных, протоколы передачи и сетевые адреса (endpoints). WSDL-описание представляет собой машиночитаемый контракт, который позволяет клиентским приложениям автоматически определять, как взаимодействовать с веб-сервисом, без необходимости знания его внутренней реализации.
История и стандартизация
WSDL был разработан компаниями Microsoft, IBM и Ariba как попытка стандартизировать описание веб-сервисов в архитектуре SOA (Service-Oriented Architecture). Первая версия, WSDL 1.0, была представлена в 2000 году, но не получила широкого распространения. В 2001 году вышла версия WSDL 1.1, которая стала де-факто стандартом. В 2007 году консорциум W3C (World Wide Web Consortium) опубликовал рекомендацию WSDL 2.0, которая, однако, не заменила предыдущую версию из-за сложности и обратной несовместимости. На практике наиболее распространённой остаётся версия WSDL 1.1.
Структура WSDL-документа
WSDL-документ — это XML-файл, который состоит из нескольких логических разделов (элементов). Основные элементы, определённые в спецификации WSDL 1.1:
<types>— описывает типы данных, используемые в сообщениях. Обычно для этого применяется XML Schema Definition (XSD), но могут использоваться и другие системы типов.<message>— определяет абстрактное представление передаваемых данных. Каждое сообщение состоит из логических частей (parts), связанных с типами из<types>.<portType>— определяет абстрактный набор операций, которые может выполнять сервис. Каждая операция связывает входные и выходные сообщения (а также сообщения об ошибках). В WSDL 2.0 этот элемент заменён на<interface>.<binding>— привязывает абстрактныйportTypeк конкретному протоколу передачи и формату данных (например, SOAP, HTTP GET/POST, MIME).<service>— определяет коллекцию портов (port), каждый из которых указывает сетевой адрес (URL) для конкретногоbinding.
Пример фрагмента WSDL-документа
``xml <definitions name="BookService" targetNamespace="http://example.com/book" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <types> <xsd:schema targetNamespace="http://example.com/book"> <xsd:element name="GetBookRequest" type="xsd:string"/> <xsd:element name="GetBookResponse" type="xsd:string"/> </xsd:schema> </types> <message name="GetBookInput"> <part name="body" element="tns:GetBookRequest"/> </message> <message name="GetBookOutput"> <part name="body" element="tns:GetBookResponse"/> </message> <portType name="BookPortType"> <operation name="GetBook"> <input message="tns:GetBookInput"/> <output message="tns:GetBookOutput"/> </operation> </portType> <binding name="BookSoapBinding" type="tns:BookPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetBook"> <soap:operation soapAction="http://example.com/GetBook"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="BookService"> <port name="BookPort" binding="tns:BookSoapBinding"> <soap:address location="http://example.com/bookservice"/> </port> </service> </definitions> ``
Типы операций (MEP — Message Exchange Patterns)
WSDL поддерживает четыре основных шаблона обмена сообщениями:
- One-way — операция принимает только входное сообщение, ответ не ожидается.
- Request-response — операция принимает входное сообщение и возвращает выходное. Наиболее распространённый тип.
- Solicit-response — операция отправляет запрос и ожидает ответ (используется редко).
- Notification — операция отправляет сообщение без ожидания ответа.
Привязки (Bindings)
WSDL не привязан к одному протоколу. Наиболее часто используются:
- SOAP — стандартный протокол для веб-сервисов. SOAP-привязка определяет, как сообщения WSDL отображаются в SOAP-конверты, включая стиль (RPC или Document) и кодировку (literal или encoded).
- HTTP — простая привязка для REST-подобных сервисов. Использует методы GET и POST, параметры передаются в URL или теле запроса.
- MIME — для передачи вложений (например, изображений или файлов).
Использование и значение
WSDL-описание является ключевым элементом архитектуры SOA. Оно позволяет:
- Автоматизировать разработку клиентов — инструменты (например, wsdl.exe, Axis, CXF) могут генерировать код клиента на Java, C#, Python и других языках непосредственно из WSDL.
- Обеспечить интероперабельность — сервисы, описанные на WSDL, могут вызываться из разных платформ и языков программирования, если они поддерживают соответствующие протоколы (SOAP, HTTP).
- Упростить тестирование — WSDL позволяет создавать тестовые заглушки (mock-сервисы) и проверять корректность сообщений.
На практике WSDL широко применяется в корпоративных информационных системах, особенно в интеграционных решениях на платформах Java (например, IBM WebSphere, Oracle SOA Suite) и .NET (Windows Communication Foundation). В России WSDL используется в государственных информационных системах, таких как Единая система межведомственного электронного взаимодействия (СМЭВ), где описание сервисов выполняется в формате WSDL.
Критика и ограничения
Несмотря на распространённость, WSDL подвергается критике по нескольким причинам:
- Сложность — WSDL-документы часто громоздки и трудны для чтения человеком. Для простых сервисов создание WSDL вручную может быть неоправданно трудоёмким.
- Жёсткость — WSDL жёстко определяет контракт, что затрудняет внесение изменений в сервис без обновления всех клиентов.
- Связь с SOAP — WSDL ассоциируется с SOAP, который считается более тяжёлым и медленным по сравнению с REST/JSON. Многие современные веб-сервисы отказываются от WSDL в пользу OpenAPI (Swagger) или GraphQL.
- Неполнота — WSDL описывает только синтаксис сообщений, но не семантику (то есть не объясняет, что означает то или иное поле). Для этого требуются дополнительные спецификации, такие как WS-Policy или WS-Semantics.
Современное состояние
С развитием REST-архитектуры и микросервисов использование WSDL сокращается. Однако в legacy-системах, государственных и банковских информационных системах, где требуется строгая типизация и формализация контрактов, WSDL остаётся востребованным. В 2020-х годах WSDL продолжает поддерживаться в таких платформах, как Microsoft .NET (WCF) и Java (Jakarta EE). Альтернативой WSDL является OpenAPI Specification (для REST) и Protocol Buffers (для gRPC).
Источники
- W3C Recommendation: Web Services Description Language (WSDL) 1.1
- W3C Recommendation: Web Services Description Language (WSDL) 2.0
- Thomas Erl. Service-Oriented Architecture: Concepts, Technology, and Design. Prentice Hall, 2005.
- Документация Microsoft по Windows Communication Foundation (WCF)
- Материалы по СМЭВ (Единая система межведомственного электронного взаимодействия)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →