Різниця між повідомленням 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 описує, як обробляти / обробляти це повідомлення, коли сервер його отримує. У нашому випадку він описує, які типи будуть «Назва», «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 також містить додаткову інформацію про те, які функції поєднують між собою для здійснення операцій, і які операції доступні в сервісі, і де знаходиться в мережі, ви можете отримати доступ до послуги / операцій.

Дивіться також W3-анотовані приклади WSDL


4
Коли ви говорите цей рядок, "WSDL потім описує, як обробляти / обробляти це повідомлення, коли сервер його отримує." Ви не думаєте, що тут щось не так. Я думаю, що WSDL більше для клієнта, щоб знати, які послуги піддаються клієнту. Я не думаю, що це керує обробкою або обробкою повідомлень на сервері. Я маю сенс?
Незламний

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. Веб-служба використовує 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: У милі дані організовані певним чином, і ця організація вказана у WSDL, тут також вказано тип даних, який слід використовувати. Для запиту та відповіді буде присутній один WSDL


    0

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

    Але мильне повідомлення - це дані, передані між клієнтом і постачальником (корисне навантаження)


    0

    WSDL виступає як інтерфейс між відправником та одержувачем.
    SOAP-повідомлення - це запит і відповідь у форматі XML.

    порівняння з java RMI

    WSDL - це клас інтерфейсу
    SOAP-повідомлення, це марширований запит та повідомлення відповіді.


    -1

    Ми можемо розглянути телефонний дзвінок У цьому номері є wsdl, а обмін інформацією - це мило.

    WSDL - це опис способу підключення до сервера зв'язку. SOAP - це повідомлення зв'язку.


    1
    Ні, номер телефону буде більше схожий на одну з кінцевих точок, визначених у WSDL. В області телефонних дзвінків немає реального еквіваленту WSDL. Найближчим може бути телефонний довідник, особливо якщо ви включаєте поняття "жовтих сторінок", яке класифікує підприємства та містить деяку інформацію про бізнес (а не лише номер телефону).
    Джон Сондерс
    Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.