Нам нужно определить, что такое веб-сервис, прежде чем рассказывать, в чем разница между SOAP и WSDL, где два (SOAP и WSDL) являются компонентами веб-сервиса.
Большинство приложений разрабатываются для взаимодействия с пользователями, пользователь вводит или ищет данные через интерфейс, а затем приложение отвечает на ввод пользователя.
Веб-служба делает более или менее то же самое, за исключением того, что приложение веб-службы обменивается данными только от машины к машине или от приложения к приложению. Часто нет прямого взаимодействия с пользователем.
Веб-сервис в основном представляет собой набор открытых протоколов, который используется для обмена данными между приложениями. Использование открытых протоколов позволяет веб-сервисам быть независимыми от платформы. Программное обеспечение, написанное на разных языках программирования и работающее на разных платформах, может использовать веб-службы для обмена данными через компьютерные сети, такие как Интернет. Другими словами, приложения Windows могут взаимодействовать с приложениями PHP, Java, Perl и многими другими, что в обычных условиях было бы невозможно.
Как работают веб-службы?
Поскольку разные приложения написаны на разных языках программирования, они часто не могут взаимодействовать друг с другом. Веб-служба обеспечивает такую связь, используя комбинацию открытых протоколов и стандартов, главным образом XML, SOAP и WSDL. Web-сервис использует XML для тегирования данных, SOAP для передачи сообщения и, наконец, WSDL для описания доступности сервисов. Давайте посмотрим на эти три основных компонента приложения веб-службы.
Протокол простого доступа к объектам (SOAP)
Протокол простого доступа к объектам или SOAP - это протокол для отправки и получения сообщений между приложениями без столкновения с проблемами взаимодействия (взаимодействие означает, что платформа, на которой работает веб-служба, становится неактуальной). Другой протокол, имеющий аналогичную функцию, - это HTTP. Он используется для доступа к веб-страницам или для работы в сети. HTTP гарантирует, что вам не нужно беспокоиться о том, какой тип веб-сервера - Apache, IIS или любой другой - обслуживает просматриваемые вами страницы или были ли просматриваемые страницы созданы в ASP.NET или HTML.
Поскольку протокол SOAP используется как для запроса, так и для ответа, его содержимое может немного отличаться в зависимости от его назначения.
Ниже приведен пример сообщения запроса и ответа SOAP.
SOAP-запрос:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
Ответ SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price>10.95</m: Price>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
Хотя оба сообщения выглядят одинаково, они используют разные методы. Например, глядя на приведенные выше примеры, вы можете видеть, что запрашивающее сообщение использует GetBookPrice
метод для получения цены книги. Ответ осуществляется GetBookPriceResponse
методом, который будет сообщением, которое вы, как "запрашивающий", увидите. Вы также можете видеть, что сообщения составляются с использованием XML.
Язык описания веб-сервисов или WSDL
WSDL - это документ, описывающий веб-службу, а также объясняющий, как получить доступ и использовать ее методы.
WSDL заботится о том, как узнать, какие методы доступны в веб-сервисе, на который вы наткнулись в Интернете.
Взгляните на образец файла WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name ="DayOfWeek"
targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date"/>
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string"/>
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput"/>
<output message="tns:DayOfWeekResponse"/>
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek"/>
<input>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="DayOfWeekService" >
<documentation>
Returns the day-of-week name for a given date
</documentation>
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/>
</port>
</service>
</definitions>
Главное, что нужно помнить о файле WSDL, это то, что он предоставляет вам:
Описание веб-службы
Методы, которые использует веб-сервис, и параметры, которые он принимает
Способ поиска веб-сервисов