Разница между сообщением SOAP и WSDL?

102

Я не понимаю, как сообщения SOAP и WSDL сочетаются друг с другом? Я начал изучать сообщения SOAP, такие как:

    POST /InStock HTTP/1.1
Host: www.example.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.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Все ли сообщения SOAP являются WSDL? Является ли SOAP протоколом, принимающим собственные «сообщения SOAP» или «WSDL»? Если они разные, тогда когда мне следует использовать сообщения SOAP, а когда - WSDL?

Некоторые разъяснения по этому поводу были бы потрясающими.

Джеймс
источник
1
WSDL - это спецификация того, какие сообщения могут быть отправлены и что можно ожидать в качестве ответа. В некотором смысле документ wsdl не нужен для связи мыла, но это обязательный элемент согласно протоколу.
troelskn

Ответы:

121

Документ SOAP отправляется по запросу. Допустим, у нас был книжный магазин, и у нас был удаленный сервер, который мы запрашивали, чтобы узнать текущую цену конкретной книги. Допустим, нам нужно передать на сервер название книги, количество страниц и номер ISBN.

Каждый раз, когда мы хотели узнать цену, мы отправляли уникальное сообщение SOAP. Это выглядело бы примерно так;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

И мы ожидаем получить ответное сообщение SOAP, например:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Затем WSDL описывает, как обрабатывать это сообщение, когда сервер его получает. В нашем случае он описывает, какими будут типы Title, NumPages и ISBN, следует ли ожидать ответа от сообщения GetBookPrice и как этот ответ должен выглядеть.

Типы будут выглядеть так:

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Но WSDL также содержит дополнительную информацию о том, какие функции связаны друг с другом для выполнения операций, и какие операции доступны в службе, а также о местонахождении в сети, в которой вы можете получить доступ к службе / операциям.

См. Также примеры WSDL с аннотациями W3

Джоно
источник
4
Когда вы говорите в этой строке: «WSDL затем описывает, как обрабатывать / обрабатывать это сообщение, когда сервер получает его». Вам не кажется, что здесь что-то не так? Я думаю, что WSDL больше для клиента, чтобы знать, какие службы предоставляются клиенту. Я не думаю, что он управляет обработкой или обработкой сообщений на сервер. Я понимаю?
Unbreakable
76

Сообщение SOAP - это XML-документ, который используется для передачи ваших данных. WSDL - это XML-документ, в котором описывается, как подключаться к вашей веб-службе и делать запросы к ней.

В основном сообщения SOAP - это данные, которые вы передаете, WSDL сообщает вам, что вы можете делать и как совершать вызовы.

Быстрый поиск в Google даст много источников для дополнительного чтения (ссылка на предыдущую книгу теперь мертва, для борьбы с этим любые новые рекомендации будут помещены в комментарии)

Просто отмечая ваши конкретные вопросы:

Все ли сообщения SOAP являются WSDL? Нет, это совсем не одно и то же.

Является ли SOAP протоколом, принимающим собственные «сообщения SOAP» или «WSDL»? Нет - требуется чтение, так как это далеко.

Если они разные, тогда когда мне следует использовать сообщения SOAP, а когда - WSDL? Мыло - это структура, которую вы применяете к своему сообщению / данным для передачи. WSDL используются только для определения того, как в первую очередь выполнять вызовы службы. Часто это делается один раз, когда вы впервые добавляете код для вызова определенной веб-службы.

Мэтью
источник
Я не понимаю, что вы подразумеваете под «одноразовой вещью», если бы вы могли уточнить несколько примеров сообщений, которые были бы потрясающими. Кроме того, вы говорите, что сообщения WSDL и SOAP используются вместе?
Джеймс
6
WSDL сообщает вам, как вызвать веб-службу. Часто вы будете использовать WSDL для автоматической генерации кода для вызова веб-службы и никогда не использовать его снова. Беглый просмотр глав книги, на которую я ссылаюсь, должен помочь.
Мэтью
27

WSDL (язык определения веб-службы) - это файл метаданных, описывающий веб-службу.

Такие вещи, как название операции, параметры и т. Д.

Мыльные сообщения - это фактическая полезная нагрузка

скартаг
источник
25

Нам нужно определить, что такое веб-сервис, прежде чем рассказывать, в чем разница между 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, это то, что он предоставляет вам:

  • Описание веб-службы

  • Методы, которые использует веб-сервис, и параметры, которые он принимает

  • Способ поиска веб-сервисов

  • Джад Шахин
    источник
    Конкретное описание
    TapanHP
    7

    Лучшая аналогия, чем телефонный звонок: заказ продуктов по почте в службе доставки по почте. Документ WSDL похож на инструкции, объясняющие, как создавать формы заказа, которые поставщик услуг будет принимать. Сообщение SOAP похоже на конверт со стандартным дизайном (размер, форма, конструкция), с которым каждое почтовое отделение в мире умеет обращаться. В такой конверт вы вкладываете бланк заказа. Сеть (например, Интернет) - это почтовая служба. Вы кладете конверт в почту. Сотрудники почтовой службы не заглядывают внутрь конверта. XML полезных данных - это форма заказа, которую вы вложили в конверт. После того, как почтовое отделение доставит конверт, поставщик веб-услуг открывает конверт и обрабатывает форму заказа. Если вы правильно создали и заполнили форму,

    Израиль Гейл
    источник
    4

    Проще говоря, если у вас есть веб-сервис калькулятора. WSDL сообщает о функциях, которые вы можете реализовать или предоставить клиенту. Например: сложить, удалить, вычесть и так далее. Если при использовании SOAP вы фактически выполняете такие действия, как doDelete (), doSubtract (), doAdd (). Итак, SOAP и WSDL - это яблоки и апельсины. Мы не должны их сравнивать. У них обоих разные функции.

    Неуязвимый
    источник
    1

    SOAP: это открытый стандартный протокол связи на основе XML, который используется для обмена информацией между пользователем и веб-службой или наоборот. Мыло - это просто документ, в котором данные каким-то образом организованы. Для каждого запроса и ответа может присутствовать отдельное мыло.

    WSDL: в soap данные каким-то образом организованы, и эта организация указана в WSDL. Здесь также указывается тип данных, который должен использоваться. Для запроса и ответа будет присутствовать один WSDL

    Арун Кумар
    источник
    0

    WSDL - это своего рода контракт между поставщиком API и клиентом, который описывает веб-службу: общедоступная функция, необязательное / обязательное поле ...

    Но мыльное сообщение - это данные, передаваемые между клиентом и провайдером (полезная нагрузка)

    Абдеррахим Субай-Элидриси
    источник
    0

    WSDL действует как интерфейс между отправителем и получателем.
    Сообщение SOAP - это запрос и ответ в формате xml.

    сравнение с java RMI

    WSDL - это
    сообщение SOAP класса интерфейса, которое маршалирует сообщение запроса и ответа.

    фасиль
    источник
    -1

    Мы можем рассматривать телефонный звонок в этом номере wsdl и обмен информацией мылом.

    WSDL - это описание того, как подключиться к коммуникационному серверу. OAP - это коммуникационные сообщения.

    хушбу
    источник
    1
    Нет, номер телефона будет больше похож на одну из конечных точек, определенных в WSDL. В сфере телефонных звонков нет реального эквивалента WSDL. Ближайшим из них может быть телефонный справочник, особенно если вы включите понятие «желтых страниц», которые классифицируют предприятия и предоставляют некоторые подробности о бизнесе (а не только номер телефона).
    Джон Сондерс