Підручник із веб-служб SOAP: що таке протокол SOAP? ПРИКЛАД

Що таке SOAP?

SOAP — це протокол на основі XML для доступу до веб-служб через HTTP. Він має деякі специфікації, які можна використовувати в усіх програмах.

SOAP відомий як Simple Object Access Protocol, але пізніше його скоротили до SOAP v1.2. SOAP — це протокол або, іншими словами, це визначення того, як веб-служби спілкуються один з одним або з клієнтськими програмами, які їх викликають.

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

Вступ до SOAP

У сучасному світі існує величезна кількість додатків, які побудовані на різних мовах програмування. Наприклад, може бути розроблена веб-програма Java, інший у .Net і ще один у PHP.

Обмін даними між програмами є надзвичайно важливим у сучасному мережевому світі. Але обмін даними між цими різнорідними програмами буде складним. Як і складність коду для здійснення цього обміну даними.

Одним із методів боротьби з цією складністю є використання XML (Extensible Markup Language) як проміжної мови для обміну даними між програмами.

Кожна мова програмування може розуміти мову розмітки XML. Таким чином, XML використовувався як базове середовище для обміну даними.

Але немає стандартних специфікацій щодо використання XML у всіх мовах програмування для обміну даними. Саме тут на допомогу приходить програмне забезпечення SOAP.

SOAP був розроблений для роботи з XML через HTTP і має певну специфікацію, яку можна використовувати в усіх програмах. Ми розглянемо додаткові подробиці протоколу SOAP у наступних розділах.

Переваги SOAP

SOAP — це протокол, який використовується для обміну даними між програмами. Нижче наведено деякі з причин використання SOAP.

  • При розробці веб-сервісів на основі SOAP вам потрібно володіти певною мовою, яку веб-сервіси можуть використовувати для спілкування з клієнтськими програмами. SOAP є ідеальним середовищем, яке було розроблено для досягнення цієї мети. Цей протокол також рекомендовано консорціумом W3C, який є керівним органом для всіх веб-стандартів.
  • SOAP — це легкий протокол, який використовується для обміну даними між програмами. Зверніть увагу на ключове слово 'світло.' Оскільки програмування SOAP базується на мові XML, яка сама по собі є легкою мовою обміну даними, отже, SOAP як протокол також належить до тієї ж категорії.
  • SOAP розроблений як незалежний від платформи та операційної системи. Таким чином, протокол SOAP може працювати з будь-якими програмами на основі мови програмування на обох Windows та Linux платформи.
  • Він працює з протоколом HTTP – SOAP працює з протоколом HTTP, який є протоколом за замовчуванням, який використовується всіма веб-додатками. Отже, немає ніяких налаштувань, які потрібні для запуску веб-служб, побудованих на протоколі SOAP, для роботи у Всесвітній павутині.

Будівельні блоки SOAP

Специфікація SOAP визначає щось, відоме як "повідомлення SOAP”, що надсилається до веб-служби та клієнтської програми.

Наведена нижче схема архітектури SOAP показує різні будівельні блоки повідомлення SOAP.

Будівельні блоки SOAP
Будівельні блоки повідомлень SOAP

Повідомлення SOAP — це не що інше, як простий XML-документ, який містить наведені нижче компоненти.

  • Елемент конверта, який ідентифікує XML-документ як повідомлення SOAP. Це містить частину повідомлення SOAP і використовується для інкапсуляції всіх деталей у повідомленні SOAP. Це кореневий елемент у повідомленні SOAP.
  • Елемент заголовка, який містить інформацію заголовка – Елемент заголовка може містити таку інформацію, як облікові дані автентифікації, які можуть використовуватися програмою, що викликає. Він також може містити визначення складних типів, які можна використовувати в повідомленні SOAP. За замовчуванням повідомлення SOAP може містити параметри, які можуть мати прості типи, такі як рядки та числа, але також можуть бути типами складних об’єктів.

Нижче наведено простий приклад служби SOAP складного типу.

Припустімо, ми хочемо надіслати тип структурованих даних, який містить комбінацію «Назва навчального посібника» та «Навчальний посібник». Descriptіон», тоді ми визначимо складний тип, як показано нижче.

Складний тип визначається тегом element . Потім усі необхідні елементи структури разом із відповідними типами даних визначаються в колекції складних типів.

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • Елемент Body, який містить інформацію про виклик і відповідь – цей елемент містить фактичні дані, які потрібно надіслати між веб-службою та програмою, що викликає. Нижче наведено приклад веб-служби SOAP із тілом SOAP, яке фактично працює зі складним типом, визначеним у розділі заголовка. Ось відповідь на ім’я підручника та підручник Descriptіон, який надсилається програмі, яка викликає цю веб-службу.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

Структура повідомлення SOAP

Слід зазначити, що повідомлення SOAP зазвичай автоматично генеруються веб-службою під час її виклику.

Щоразу, коли клієнтська програма викликає метод у веб-службі, веб-служба автоматично генерує повідомлення SOAP, яке міститиме необхідні деталі даних, які будуть надіслані з веб-служби клієнтській програмі.

Як обговорювалося в попередній темі цього підручника SOAP, просте повідомлення SOAP має такі елементи:

  • Елемент «Конверт».
  • Елемент заголовка і
  • Елемент тіла
  • Елемент Fault (необов'язково)

Давайте розглянемо наведений нижче приклад простого повідомлення SOAP і побачимо, що насправді робить елемент.

Структура повідомлення SOAP

Структура повідомлення SOAP
  1. Як видно з наведеного вище повідомлення SOAP, перша частина повідомлення SOAP є елементом конверта, який використовується для інкапсуляції всього повідомлення SOAP.
  2. Наступним елементом є тіло SOAP, яке містить деталі фактичного повідомлення.
  3. Наше повідомлення містить веб-службу під назвою «Guru99WebService».
  4. “Guru99Webservice” приймає параметр типу 'int' і має назву TutorialID.

Тепер наведене вище повідомлення SOAP буде передано між веб-службою та клієнтською програмою.

Ви бачите, наскільки корисною є наведена вище інформація для клієнтської програми. Повідомлення SOAP повідомляє клієнтській програмі назву веб-служби, а також те, які параметри вона очікує, а також тип кожного параметра, який приймає веб-служба.

Елемент конверта SOAP

Перший шматок будівельного блоку — це конверт SOAP.

Конверт SOAP використовується для інкапсуляції всіх необхідних деталей повідомлень SOAP, якими обмінюються веб-служба та клієнтська програма.

Елемент конверта SOAP використовується для позначення початку та кінця повідомлення SOAP. Це дозволяє клієнтській програмі, яка викликає веб-службу, знати, коли закінчується повідомлення SOAP.

На елементі конверта SOAP можна звернути увагу на наступні моменти.

  • Кожне повідомлення SOAP має мати кореневий елемент Envelope. Абсолютно обов’язковим для повідомлення SOAP є елемент конверта.
  • Кожен елемент Envelope повинен мати принаймні один елемент мильного тіла.
  • Якщо елемент Envelope містить елемент заголовка, він повинен містити не більше одного, і він має з’являтися як перший дочірній елемент Envelope перед елементом body.
  • Конверт змінюється, коли змінюються версії SOAP.
  • SOAP-процесор, сумісний з v1.1, створює помилку після отримання повідомлення, що містить простір імен конверта v1.2.
  • SOAP-процесор, сумісний із v1.2, генерує помилку Version Mismatch, якщо отримує повідомлення, яке не містить простору імен конверта v1.2.

Нижче наведено приклад SOAP API версії 1.2 елемента конверта SOAP.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
          <soap:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

Повідомлення про помилку

Коли до веб-служби SOAP надсилається запит, відповідь може мати 2 форми: успішна відповідь або помилка. Коли генерується успіх, відповідь від сервера завжди буде повідомленням SOAP. Але якщо виникають помилки SOAP, вони повертаються як помилки «HTTP 500».

Повідомлення про помилку SOAP складається з таких елементів.

  1. – Це код, який позначає код помилки. Код помилки може бути будь-яким із наведених нижче значень
    1. SOAP-ENV:VersionMismatch – це коли виявляється недійсний простір імен для елемента SOAP Envelope.
    2. SOAP-ENV:MustUnderstand – безпосередній дочірній елемент елемента Header з атрибутом mustUnderstand, встановленим на «1», не було зрозуміло.
    3. SOAP-ENV:Client – ​​повідомлення було сформовано неправильно або містило неправильну інформацію.
    4. SOAP-ENV:Сервер – виникла проблема із сервером, тому повідомлення не вдалося продовжити.
  2. – Це текстове повідомлення з детальним описом помилки.
  3. (необов'язково)– Це текстовий рядок, який вказує, хто спричинив помилку.
  4. (необов'язково) – Це елемент для повідомлень про помилки, що стосуються конкретної програми. Тому програма може мати певне повідомлення про помилку для різних сценаріїв бізнес-логіки.

Приклад повідомлення про помилку

Приклад повідомлення про помилку наведено нижче. Помилка виникає, якщо сценарій, у якому клієнт намагається використати метод під назвою TutorialID у класі GetTutorial.

Наведене нижче повідомлення про помилку створюється, якщо метод не існує у визначеному класі.

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

вихід:

Коли ви виконуєте наведений вище код, він покаже помилку на зразок «Не вдалося знайти метод (GetTutorialID) у класі (GetTutorial)».

Модель зв'язку SOAP

Весь зв'язок через SOAP здійснюється через протокол HTTP. До SOAP багато веб-сервіси використовував стандартний стиль RPC (Remote Procedure Call) для спілкування. Це був найпростіший вид спілкування, але він мав багато обмежень.

Тепер у цьому підручнику з API SOAP розглянемо наведену нижче схему, щоб побачити, як працює цей зв’язок. У цьому прикладі припустімо, що сервер містить веб-службу, яка надає 2 методи

  • GetEmployee – Це дозволить отримати всі відомості про співробітника
  • SetEmployee – Це відповідно встановить значення деталей, як-от відділ співробітників, зарплата тощо.

У звичайному стилі спілкування RPC клієнт просто викликає методи у своєму запиті та надсилає необхідні параметри на сервер, а сервер надсилає бажану відповідь.

Модель зв'язку SOAP

Наведена вище модель зв'язку має наведені нижче серйозні обмеження

  1. Не залежить від мови – Сервер, на якому розміщені методи, буде на певній мові програмування, і зазвичай виклики до сервера відбуватимуться лише цією мовою програмування.
  2. Не стандартний протокол – Коли здійснюється виклик до віддаленої процедури, виклик не здійснюється через стандартний протокол. Це була проблема, оскільки здебільшого всі комунікації через Інтернет мали здійснюватися через протокол HTTP.
  3. Брандмауери – Оскільки виклики RPC не проходять через звичайний протокол, на сервері мають бути відкриті окремі порти, щоб дозволити клієнту спілкуватися з сервером. Зазвичай усі брандмауери блокували б цей тип трафіку, і, як правило, потрібно було багато налаштувати, щоб забезпечити роботу такого роду зв’язку між клієнтом і сервером.

Щоб подолати всі наведені вище обмеження, SOAP використовуватиме наведену нижче модель зв’язку

Модель зв'язку SOAP

  1. Клієнт форматує інформацію про виклик процедури та будь-які аргументи в повідомлення SOAP і надсилає його на сервер як частину запиту HTTP. Цей процес інкапсуляції даних у повідомлення SOAP був відомий як Сортування.
  2. Потім сервер розгортає повідомлення, надіслане клієнтом, дивиться, що запитує клієнт, а потім надсилає відповідну відповідь назад клієнту як повідомлення SOAP. Практика розгортання запиту, надісланого клієнтом, відома як Демаршалювання.

Практичний приклад SOAP

Тепер у цьому підручнику з SoapUI розглянемо практичний приклад SOAP,

Ймовірно, один із найкращих способів побачити, як генеруються повідомлення SOAP, — це фактично побачити веб-службу в дії.

У цій темі буде розглянуто використання Microsoft.Net framework для створення веб-сервісу ASMX. Цей тип веб-служби підтримує як SOAP версії 1.1, так і версії 1.2.

Веб-служби ASMX автоматично генерують Мова визначення веб-служб (WSDL) документ. Цей документ WSDL потрібен клієнтській програмі, яка викликає, щоб програма знала, що може робити веб-служба.

У нашому прикладі ми збираємося створити просту веб-службу, яка буде використовуватися для повернення рядка програмі, яка викликає веб-службу.

Цей веб-сервіс буде розміщено в Asp.Net веб-додаток. Потім ми викличемо веб-службу та побачимо результат, який повертає веб-служба.

Visual Studio також покаже нам, яке повідомлення SOAP передається між веб-службою та програмою, що викликає.

Перша передумова для налаштування програми веб-сервісу, яку можна виконати, виконавши наведені нижче дії.

Для цього прикладу переконайтеся, що у вашій системі встановлено Visual Studio 2013.

Крок 1) Першим кроком є ​​створення пустої веб-програми ASP.Net. У Visual Studio 2013 клацніть пункт меню Файл->Новий проект.

Приклад повідомлення SOAP

Після того, як ви клацнете опцію «Новий проект», Visual Studio відкриє ще одне діалогове вікно для вибору типу проекту та надання необхідних деталей проекту. Це пояснюється в наступному кроці.

Крок 2) На цьому етапі

  1. Обов’язково спочатку виберіть C# веб-шаблон веб-додатку ASP.NET. Проект має бути такого типу, щоб створити проект служб SOAP. Вибравши цей параметр, Visual Studio виконає необхідні кроки для додавання необхідних файлів, необхідних для будь-якої веб-програми.
  2. Дайте назву своєму проекту, який у нашому випадку було надано як webservice.asmx. Потім переконайтеся, що вказали місце, де будуть зберігатися файли проекту.

Приклад повідомлення SOAP

Після завершення ви побачите файл проекту, створений у вашому провіднику рішень у Visual Studio 2013.

Приклад повідомлення SOAP

Крок 3) На цьому етапі

Ми збираємося додати файл веб-сервісу до нашого проекту

  1. Спочатку клацніть правою кнопкою миші файл проекту, як показано нижче

Приклад повідомлення SOAP

  1. Після того як ви клацнете правою кнопкою миші на файлі проекту, ви матимете можливість вибрати опцію «Додати->Веб-служба (ASMX), щоб додати файл веб-служби. Просто вкажіть назву служби навчання для файлу назви веб-служби.

Приклад повідомлення SOAP

Крок 4) Додайте наведений нижче код до asmx-файлу Tutorial Service.

Приклад повідомлення SOAP

Пояснення коду:

  1. Цей рядок коду надає ім’я файлу веб-служби. Це важливий крок, оскільки він дає можливість клієнтській програмі викликати веб-службу за допомогою імені веб-служби.
  2. Зазвичай файл класу використовується для інкапсуляції функціональності веб-сервісу. Таким чином, файл класу буде містити визначення всіх веб-методів, які нададуть певну функціональність клієнтській програмі.
  3. Тут [WebMethod] відомий як атрибут, який описує функцію. Наступний крок створює функцію під назвою «Guru99WebService», але додавання атрибута [WebMethod] гарантує, що цей метод може бути викликаний клієнтською програмою. Якщо цей атрибут відсутній, клієнтська програма ніколи не може викликати метод.
  4. Тут ми визначаємо функцію під назвою «Guru99WebService», яка використовуватиметься для повернення рядка клієнтській програмі, що викликає. Ця функція є веб-службою, яку може викликати будь-яка клієнтська програма.
  5. Ми використовуємо оператор return, щоб повернути клієнтській програмі рядок «Це веб-служба Guru99».

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Приклад повідомлення SOAP

  • Вихідні дані чітко показують, що назва нашої веб-служби — «Веб-служба Guru99», що є результатом надання назви для нашої веб-служби.
  • Ми також бачимо, що можемо викликати веб-службу. Якщо ми натиснемо кнопку Викликати, ми отримаємо наведену нижче відповідь у веб-переглядачі.

Приклад повідомлення SOAP

Наведений вище вихід,

  • Це чітко показує, що під час виклику веб-методу повертається рядок «Це веб-служба Guru99».
  • Visual Studio також дозволяє переглядати запит і відповідь на повідомлення SOAP, які генеруються під час виклику вищезазначеної веб-служби.

Нижче показано запит SOAP, який створюється під час виклику веб-служби.

Приклад повідомлення SOAP

Пояснення коду:

  1. Перша частина повідомлення SOAP — це елемент конверта, який обговорювався в попередніх розділах. Це елемент інкапсуляції, який присутній у кожному повідомленні SOAP.
  2. Тіло SOAP є наступним елементом і містить фактичні деталі повідомлення SOAP.
  3. Третя частина — це елемент, який вказує, що ми хочемо викликати службу під назвою «Guru99WebService».

Приклад повідомлення SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

Пояснення коду:

  1. Перша частина повідомлення SOAP — це елемент конверта, який обговорювався в попередніх розділах. Це елемент інкапсуляції, який присутній у кожному повідомленні SOAP.
  2. Тіло SOAP є наступним елементом і містить фактичні деталі повідомлення SOAP.
  3. Цікава частина, яку ви зараз побачите, це атрибут string. Це повідомляє клієнтській програмі, що викликана веб-служба повертає об’єкт типу string. Це дуже корисно, оскільки клієнтська програма, яка інакше не знала б, що повертає веб-служба.

Підсумки

  • SOAP — це протокол, який використовується для обміну даними між додатками, створеними на різних мови програмування.
  • SOAP побудовано на основі специфікації XML і працює з протоколом HTTP. Це робить його ідеальним для використання у веб-додатках.
  • Будівельні блоки SOAP складаються з повідомлення SOAP. Кожне повідомлення SOAP складається з елемента конверта, заголовка та елемента тіла.
  • Елемент конверта є обов’язковим елементом у повідомленні SOAP і використовується для інкапсуляції всіх даних у повідомленні SOAP.
  • Елемент заголовка може використовуватися для розміщення такої інформації, як інформація автентифікації або визначення складних типів даних.
  • Елемент body — це основний елемент, який містить визначення веб-методів разом із будь-якою інформацією про параметри, якщо потрібно.