Sobes.tech
Назад к вопросам
Junior — Middle
87

Объясните, что такое веб-сервис SOAP и как он реализуется с помощью WSDL?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

SOAP — это протокол обмена сообщениями для вызова удалённых сервисов через XML, обычно поверх HTTP. WSDL описывает контракт сервиса: какие операции доступны, какие у них входные и выходные данные, по какому адресу и в каком формате вызывать. Важно показать понимание разделения: SOAP — это способ обмена, WSDL — описание интерфейса.

Определение:

SOAP (Simple Object Access Protocol) — это стандарт для обмена структурированными сообщениями между приложениями. Сообщение обычно передаётся в XML-формате и включает Envelope, Header и Body.
WSDL (Web Services Description Language) — это XML-описание веб-сервиса, которое формализует его интерфейс: методы, типы данных, точки доступа, протоколы и привязки. На практике WSDL позволяет клиенту сгенерировать код и вызывать SOAP-сервис без ручного разбора XML.

Пример использования:

Например, есть сервис банка, который по номеру счёта возвращает баланс. Сервер публикует WSDL, а клиент на его основе генерирует proxy-класс и вызывает операцию getBalance.

<definitions name="BankService"
    targetNamespace="http://example.com/bank"
    xmlns:tns="http://example.com/bank"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

    <message name="GetBalanceRequest">
        <part name="accountId" type="xsd:string"/>
    </message>

    <message name="GetBalanceResponse">
        <part name="balance" type="xsd:decimal"/>
    </message>

    <portType name="BankPortType">
        <operation name="getBalance">
            <input message="tns:GetBalanceRequest"/>
            <output message="tns:GetBalanceResponse"/>
        </operation>
    </portType>

    <binding name="BankBinding" type="tns:BankPortType">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http"/>
    </binding>

    <service name="BankService">
        <port name="BankPort" binding="tns:BankBinding">
            <soap:address location="https://api.example.com/bank"/>
        </port>
    </service>
</definitions>

Пояснение кода:

Кода реализации сервиса здесь не требуется — это пример WSDL-контракта.
message описывает входные и выходные данные операции.
portType задаёт набор операций сервиса, то есть его логический интерфейс.
binding определяет, как именно этот интерфейс будет передаваться через SOAP и HTTP.
service указывает конкретный endpoint, куда отправлять SOAP-запросы.

Если бы клиент вызывал сервис, он отправил бы SOAP-запрос в XML-конверте, а сервер вернул бы SOAP-ответ с нужным значением.

Ключевые моменты:

  • SOAP — это протокол обмена сообщениями, а не просто формат данных.
  • Основной носитель SOAP-сообщения — XML.
  • WSDL — это контракт сервиса, описывающий операции и формат взаимодействия.
  • WSDL часто используется для генерации клиентского и серверного кода.
  • SOAP-сервисы обычно строго типизированы и хорошо подходят для интеграций с формальным контрактом.
  • Для Java это часто связано с JAX-WS или похожими инструментами, но суть остаётся той же: контракт описан в WSDL, обмен идёт SOAP-сообщениями.