Учебное пособие по веб-сервисам SOAP: Что такое протокол SOAP?

⚡ Умное резюме

SOAP (Simple Object Access Protocol) — это протокол на основе XML для доступа к веб-сервисам по протоколу HTTP. В этом ресурсе объясняются основные компоненты SOAP, структура сообщений, элементы «конверта» и «ошибки», модель связи, а также приводится практический пример веб-сервиса ASMX.

  • 📦 Основной протокол: SOAP — это независимый от протокола передачи данных протокол обмена сообщениями на основе XML, позволяющий приложениям, созданным на разных языках программирования, обмениваться данными по протоколу HTTP.
  • 🧱 Строительные блоки: SOAP-сообщение состоит из конверта (Envelope), необязательного заголовка (Header), тела (Body) и необязательного элемента ошибки (Fault).
  • ✉️ Элемент конверта: Обязательный корневой Envelope инкапсулирует сообщение и сигнализирует клиентскому приложению о его начале и конце.
  • 🔁 Модель коммуникации: Клиент преобразует запрос в SOAP-сообщение; сервер десериализует его и возвращает SOAP-ответ, всё по протоколу HTTP.
  • 🇧🇷 Практический пример: Веб-сервис ASMX в Visual Studio автоматически генерирует SOAP-запросы и ответы для вызывающего клиента.

Что такое протокол SOAP?

Что такое МЫЛО?

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

SOAP известен как Simple Object Access Protocol (простой протокол доступа к объектам), но позже его название сократили до SOAP v1.2. SOAP — это протокол, или, другими словами, определение того, как веб-сервисы взаимодействуют друг с другом или с клиентскими приложениями, которые их вызывают.

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

Мыло Введение

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

Обмен данными между приложениями имеет решающее значение в современном сетевом мире. Но обмен данными между этими разнородными приложениями будет сложным. Так же будет и сложность кода для осуществления этого обмена данными.

Одним из методов борьбы с этой сложностью является использование XML (расширяемого языка разметки) в качестве промежуточного языка для обмена данными между приложениями.

Каждый язык программирования поддерживает язык разметки XML. Следовательно, XML использовался в качестве базовой среды для обмена данными.

Однако не существует стандартных спецификаций по использованию XML во всех языках программирования для обмена данными. Вот тут-то и пригодится программное обеспечение SOAP.

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

Преимущества SOAP

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

  • Когда развиваетсяping Для работы веб-сервисов на основе SOAP необходим язык программирования, позволяющий веб-сервисам взаимодействовать с клиентскими приложениями. SOAP — это идеальный инструмент, разработанный именно для этой цели. Этот протокол также рекомендован консорциумом W3C, который является руководящим органом по всем веб-стандартам.
  • SOAP — это облегченный протокол, используемый для обмена данными между приложениями. Обратите внимание на ключевое слово 'легкийПоскольку программирование SOAP основано на языке XML, который сам по себе является легковесным языком обмена данными, протокол SOAP также относится к этой категории.
  • Протокол SOAP разработан как платформенно-независимый и независимый от операционной системы. Таким образом, протокол SOAP может работать с приложениями, использующими любые языки программирования, как на платформе, так и на операционной системе. Windows и Linux платформ.
  • SOAP работает по протоколу HTTP, который является протоколом по умолчанию, используемым всеми веб-приложениями. Следовательно, для работы веб-сервисов, построенных на протоколе SOAP, во Всемирной паутине не требуется никаких дополнительных настроек.

Строительные блоки SOAP

Спецификация SOAP определяет нечто, известное как «SOAP-сообщение«Именно это и отправляется веб-сервису и клиентскому приложению».

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

Строительные блоки SOAP

Сообщение SOAP — это не что иное, как простой документ XML, который имеет следующие компоненты.

  • An Конверт Элемент, идентифицирующий XML-документ как SOAP-сообщение — это содержащая часть SOAP-сообщения, используемая для инкапсуляции всех деталей SOAP-сообщения. Это корневой элемент в SOAP-сообщении.
  • A заголовок Элемент заголовка, содержащий информацию заголовка – Элемент заголовка может содержать такую ​​информацию, как учетные данные для аутентификации, которые может использовать вызывающее приложение. Он также может содержать определение сложных типов, которые могут использоваться в сообщении SOAP. По умолчанию сообщение SOAP может содержать параметры, которые могут быть простых типов, таких как строки и числа, но также могут быть сложными объектными типами.

Ниже приведён простой пример SOAP-сервиса для сложного типа данных. Предположим, мы хотим отправить структурированный тип данных, содержащий комбинацию «Название учебного пособия» и «Учебное пособие». DescriptЕсли мы определим комплексный тип, как показано ниже. Комплексный тип определяется тегом элемента. Все необходимые элементы структуры, а также соответствующие им типы данных, затем определяются в коллекции сложных типов.

<xsd:complexType>
   <xsd:sequence>
      <xsd:element name="Tutorial Name" type="string"/>
      <xsd:element name="Tutorial Description" type="string"/>
   </xsd:sequence>
</xsd:complexType>

A Тело Элемент, содержащий информацию о вызове и ответе — этот элемент содержит фактические данные, которые необходимо передать между веб-сервисом и вызывающим приложением. Ниже приведен пример тела SOAP-сообщения веб-сервиса, который фактически работает со сложным типом, определенным в разделе заголовка. Вот ответ с именем учебного пособия и самим учебным пособием. Description, который отправляется вызывающему приложению, которое вызывает этот веб-сервис.

<soap:Body>
   <GetTutorialInfo>
      <TutorialName>Web Services</TutorialName>
      <TutorialDescription>All about web services</TutorialDescription>
   </GetTutorialInfo>
</soap:Body>

Структура сообщения SOAP

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

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

Как обсуждалось в предыдущей теме этого руководства по SOAP, простое SOAP-сообщение содержит следующие элементы:

  • Элемент «Конверт»
  • Элемент заголовка и
  • Элемент тела
  • Элемент «Неисправность» (необязательно)

Рассмотрим приведенный ниже пример простого SOAP-сообщения и посмотрим, что делает каждый элемент.

Структура сообщения SOAP
Структура сообщения SOAP

  1. Как видно из приведенного выше сообщения SOAP, первая часть сообщения SOAP представляет собой элемент конверта, который используется для инкапсуляции всего сообщения SOAP.
  2. Следующий элемент — это тело SOAP, содержащее сведения о самом сообщении.
  3. В нашем сообщении содержится ссылка на веб-сервис с именем «Guru99WebService”.
  4. "GuruФункция 99Webservice принимает параметр типа 'int' с именем TutorialID.

Теперь указанное выше сообщение SOAP будет передаваться между веб-службой и клиентским приложением.

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

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

Первым элементом строительного блока является конверт SOAP.

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

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

В элементе конверта SOAP можно отметить следующие моменты.

  • Каждое SOAP-сообщение должно содержать корневой элемент Envelope. Наличие элемента Envelope в SOAP-сообщении абсолютно обязательно.
  • Каждый элемент конверта должен иметь хотя бы один элемент тела мыла.
  • Если элемент Envelope содержит элемент заголовка, он должен содержать не более одного элемента и должен отображаться как первый дочерний элемент Envelope перед элементом body.
  • Конверт меняется при изменении версий SOAP.
  • Процессор SOAP, совместимый с версией 1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта версии 1.2.
  • Процессор SOAP, совместимый с версией 1.2, генерирует ошибку несоответствия версий, если он получает сообщение, которое не включает пространство имен конверта версии 1.2.

Ниже приведён пример использования SOAP API версии 1.2 элемента SOAP envelope.

<?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 ответ может быть двух видов: успешный ответ или ответ с ошибкой. В случае успешного ответа сервер всегда отправляет SOAP-сообщение. Но если возникает ошибка SOAP, она возвращается в виде ошибки «HTTP 500».

Сообщение об ошибке SOAP состоит из следующих элементов.

  1. <faultCode> – Это код, обозначающий ошибку. Код ошибки может принимать любое из следующих значений:
    1. SOAP-ENV:VersionMismatch — это случае, когда обнаружено недопустимое пространство имен для элемента SOAP Envelope.
    2. SOAP-ENV:MustUnderstand — непосредственный дочерний элемент элемента Header с атрибутом mustUnderstand, установленным на «1», не был понят.
    3. SOAP-ENV:Client — сообщение было неправильно сформировано или содержало неверную информацию.
    4. SOAP-ENV:Server — возникла проблема с сервером, поэтому сообщение не могло быть отправлено.
  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 (удаленный вызов процедур). Это был самый простой вид связи, но он имел массу ограничений.

В этом руководстве по SOAP API рассмотрим приведенную ниже диаграмму, чтобы понять, как работает это взаимодействие. В этом примере предположим, что на сервере размещен веб-сервис, предоставляющий два метода:

  • Получить сотрудника – Это позволит получить все данные о сотруднике.
  • УстановитьСотрудник – Это позволит соответствующим образом установить значения таких данных, как отдел сотрудника, зарплата и т. д.

При обычном общении в стиле RPC клиент просто вызывает методы в своем запросе и отправляет необходимые параметры серверу, а затем сервер отправляет желаемый ответ.

Модель связи SOAP, стиль RPC

Описанная выше модель коммуникации имеет следующие серьезные ограничения:

  1. Не зависит от языка – Сервер, на котором размещены методы, будет написан на определенном языке программирования, и обычно вызовы к серверу будут осуществляться только на этом языке программирования.
  2. Не стандартный протокол – При вызове удаленной процедуры вызов не осуществляется по стандартному протоколу. Это было проблемой, поскольку в основном все общение через Интернет должно было осуществляться через протокол HTTP.
  3. Межсетевые экраны – Поскольку вызовы RPC не проходят по обычному протоколу, на сервере необходимо открыть отдельные порты, чтобы клиент мог взаимодействовать с сервером. Обычно все межсетевые экраны блокируют трафик такого типа, и для обеспечения работы такого типа связи между клиентом и сервером обычно требуется значительная настройка.

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

Модель коммуникации SOAP, стиль SOAP

  1. Клиент форматировал информацию о вызове процедуры и любых аргументах в SOAP-сообщение и отправлял его на сервер в составе HTTP-запроса. Этот процесс инкапсуляции данных в SOAP-сообщение был известен как сортировочный.
  2. Затем сервер расшифровывает сообщение, отправленное клиентом, определяет, что именно запросил клиент, и отправляет соответствующий ответ клиенту в виде SOAP-сообщения. Практика расшифровки сообщения заключается в следующем:ping Запрос, отправленный клиентом, называется Демаршаллинг.

Практический пример SOAP

Теперь в этом SoapUI В этом уроке давайте рассмотрим практический пример SOAP. Вероятно, один из лучших способов понять, как генерируются SOAP-сообщения, — это увидеть веб-сервис в действии.

В этой теме будет рассмотрено использование MicrosoftПлатформа .Net для создания веб-сервиса ASMX. Этот тип веб-службы поддерживает SOAP версии 1.1 и версии 1.2.

Веб-службы ASMX автоматически генерируют Язык определения веб-сервисов (WSDL) документ. Этот документ WSDL необходим вызывающему клиентскому приложению, чтобы приложение знало, на что способна веб-служба.

В нашем примере мы создадим простой веб-сервис, который будет возвращать строку приложению, вызывающему этот веб-сервис. Этот веб-сервис будет размещен в... Асп.Нет веб приложение. Затем мы вызовем веб-службу и увидим результат, возвращаемый веб-службой.

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)», чтобы добавить файл веб-службы. Просто укажите имя файла веб-службы как Tutorial Service.

Пример SOAP-сообщения: добавление веб-сервиса

Шаг 4) Добавьте следующий код в asmx-файл Tutorial Service.

Пример кода веб-сервиса для SOAP-сообщения

Code Объяснение:

  1. Эта строка кода предоставляет имя для файла вашего веб-сервиса. Это важный шаг, поскольку он позволяет клиентскому приложению вызывать веб-службу по имени веб-службы.
  2. Обычно файл класса используется для инкапсуляции функциональности веб-службы. Таким образом, файл класса будет содержать определения всех веб-методов, которые обеспечат некоторую функциональность клиентскому приложению.
  3. Здесь [WebMethod] — это атрибут, описывающий функцию. На следующем шаге создается функция с именем «GuruМетод называется 99WebService, но добавление атрибута [WebMethod] гарантирует, что этот метод может быть вызван клиентским приложением. Если этот атрибут отсутствует, то метод никогда не будет вызван клиентским приложением.
  4. Здесь мы определяем функцию, которая называется 'GuruФункция `99WebService` будет использоваться для возврата строки вызывающему клиентскому приложению. Эта функция представляет собой веб-сервис, который может быть вызван любым клиентским приложением.
  5. Мы используем оператор return для возврата строки «This is a» Guru99 Веб-сервис» для клиентского приложения.

Если код выполнен успешно, при запуске кода в браузере будет отображен следующий вывод.

Выход:

Пример выходных данных SOAP-сообщения

  • Результат наглядно показывает, что название нашего веб-сервиса — «Guru«99 Web Service» — так мы назвали наш веб-сервис.
  • Мы также видим, что можем вызвать веб-сервис. Если мы нажмем кнопку «Вызвать», то в веб-браузере получим следующий ответ.

Пример SOAP-сообщения: вызов ответа

Приведенный выше результат:

  • Это наглядно показывает, что при вызове веб-метода строка «Это GuruВозвращается значение 99 «Веб-сервис».
  • Visual Studio также позволяет просматривать запрос и ответ сообщения SOAP, которые генерируются при вызове указанной выше веб-службы.

Запрос SOAP, который генерируется при вызове веб-службы, показан ниже.

Пример SOAP-сообщения SOAP-запроса

Code Объяснение:

  1. Первая часть SOAP-сообщения — это элемент конверта, который обсуждался в предыдущих главах. Это инкапсулирующий элемент, присутствующий в каждом SOAP-сообщении.
  2. Тело SOAP является следующим элементом и содержит фактические сведения о сообщении SOAP.
  3. Третья часть — это элемент, указывающий, что мы хотим вызвать сервис, который называется 'Guru99WebService'.

Пример SOAP-сообщения 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>

Code Объяснение:

  1. Первая часть SOAP-сообщения — это элемент конверта, который обсуждался в предыдущих главах. Это инкапсулирующий элемент, присутствующий в каждом SOAP-сообщении.
  2. Тело SOAP является следующим элементом и содержит фактические сведения о сообщении SOAP.
  3. Самое интересное, что вы сейчас увидите, — это атрибут 'string'. Он сообщает клиентскому приложению, что вызываемый веб-сервис возвращает объект типа string. Это очень полезно, поскольку в противном случае клиентское приложение не знало бы, что возвращает веб-сервис.

Часто задаваемые вопросы (FAQ)

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

Да. Инструменты искусственного интеллекта могут автоматически генерировать примеры SOAP-сообщений, создавать сценарии сбоев и разрабатывать регрессионные тесты для конечных точек. Перед использованием разработчикам следует проверить сгенерированный XML-код, чтобы убедиться в правильности пространств имен, типов данных и заголовков безопасности.

SOAP — это строгий протокол на основе XML со встроенными стандартами безопасности и обработки ошибок. REST — это более лёгкий архитектурный стиль, использующий методы HTTP и часто JSON. SOAP подходит для формальной интеграции с корпоративными системами, в то время как REST популярен для публичных веб-API.

Да. Хотя REST доминирует среди новых общедоступных API, SOAP остается распространенным в корпоративных, банковских, платежных и телекоммуникационных системах, требующих надежной безопасности и формального соответствия.tracts (WSDL) и надежный обмен сообщениями. Многие устаревшие интеграции по-прежнему зависят от веб-сервисов SOAP.

Подведем итог этой публикации следующим образом: