Открыть сервис

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).

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →