что такое soap протокол
Что такое SOAP?
Объясните, пожалуйста, простыми словами, что такое SOAP, для чего нужен, и, если можно, пару примеров использования.
6 ответов 6
Лирическая часть.
Представьте что у вас реализована или реализуется некая система, которая должна быть доступна извне. Т.е. есть некий сервер, с которым вам надо общаться. Например веб-сервер.
Этот сервер может выполнять множество действий, работать с базой, выполнять какие-то сторонние запросы к другим серверам, заниматься каким-то вычислениями и т.д. жить и возможно развиваться по ему известному сценарию (т.е. по сценарию разработчиков). С таким сервером общаться человеку неинтересно, потому что он может не уметь/не хотеть отдавать красивые странички с картинками и прочим юзер-френдли контентом. Он написан и работает чтобы работать и выдавать на запросы к нему данные, не заботясь, чтоб они были человекочитаемые, клиент сам с ними разберется.
Практическая часть.
Веб-сервис (так называется то, что предоставляет сервер и то, что используют клиенты) дает возможность общения с сервером четко структурированными сообщениями. Дело в том, что веб-сервис не принимает абы какие данные. На любое сообщение, которое не соответствует правилам, веб-сервис ответит ошибкой. Ошибка будет, кстати, тоже в виде xml с четкой структурой (чего нельзя сказать правда о тексте сообщения).
WSDL (Web Services Description Language). Правила, по которым составляются сообщения для веб-сервиса описываются так же с помощью xml и также имеют четкую структуру. Т.е. если веб-сервис предоставляет возможность вызова какого-то метода, он должен дать возможность клиентам узнать какие параметры для данного метода используются. Если веб-сервис ждет строку для метода Method1 в качестве параметра и строка должна иметь имя Param1, то в описании веб-сервиса эти правила будут указаны.
Для клиентов достаточно знать url веб-сервиса, wsdl всегда будет рядом, по которому можно получить представление о методах и их параметрах, которые предоставляет этот веб-сервис.
Какие плюсы у всех этих наворотов:
Описание, имеющее четкую структуру, читается любым soap-клиентом. Т.е. какой бы ни был веб-сервис, клиент поймет какие данные веб-сервис принимает. По этому описанию клиент может построить свою внутреннюю структуру классов объектов, т.н. binding’и. В итоге программисту, использующему веб-сервис, остается написать что-то типа (псевдокод):
Минусов тоже полно:
В качестве примера есть открытый веб-сервис belavia:
Можете вручную создать и послать запрос типа:
ЗЫ Раньше был открыт веб-сервис аэрофлота, но после того как 1C добавили поддержку soap в 8ку, куча 1с-бета-тестеров с успехом положили его. Сейчас что-то там поменяли (адреса не знаю, можно поискать, если интересно).
ЗЗЫ Дисклеймер. Рассказал на бытовом уровне. Пинать можно.
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Тут должна быть шутка про мыло. Но мы ее не придумали 😬
SOAP не может отличить вызовы от процедур и ответов, и его возможности включают определение форматов сообщений в виде конкретного XML-документа. Сообщение может содержать информацию о вызовах процедур, ответах, запросах и так далее.
Наиболее важной частью для технологии интернет услуг является вышеописанная технология. Данная технология позволяет производить обмен данными между различными сетями. Если же говорить другими словами, то он допускает передачу информации из различных интернет-сервисов (за счет своего рода инкапсуляции). Представленное действие обеспечивает эффективную связь по сети между получателем и отправителем XML документов, путем поддержания общего протокола передачи информации.
SOAP является базовой моделью одностороннего подключения, что позволяет обеспечить согласованный обмен сообщениями между получателем и отправителем. Технология SOAP включает в себя специальное соглашение, которое предназначено для преобразования односторонних сообщений работая по принципу «запрос-ответ», а также возможность определить передачу всего документа XML.
Общая структура SOAP сообщения
Обработка ошибок в SOAP-сообщениях
Если сервер SOAP обнаруживает ошибку при обработке входящего сообщения SOAP (Simple Object Access Protocol), обработка останавливается, и клиенту отправляется сообщение SOAP с элементом ошибки и сообщением об ошибке.
Типы ошибок:
Список кодов ошибок постоянно меняется и расширяется. Версия 1.1 определяет следующие типы ошибок:
Типы ошибок в версии 1.2:
2) Простой протокол доступа к объектам
Что такое SOAP?
SOAP — это основанный на XML протокол для доступа к веб-сервисам по HTTP. У него есть некоторая спецификация, которая может быть использована во всех приложениях.
SOAP известен как простой протокол доступа к объектам, но в более поздние времена был сокращен до SOAP v1.2. SOAP — это протокол, или, другими словами, это определение того, как веб-сервисы взаимодействуют друг с другом или взаимодействуют с клиентскими приложениями, которые их вызывают.
SOAP был разработан как промежуточный язык, чтобы приложения, построенные на разных языках программирования, могли легко общаться друг с другом и избегать чрезмерных усилий по разработке.
В этом уроке вы узнаете
SOAP Введение
Обмен данными между приложениями имеет решающее значение в современном сетевом мире. Но обмен данными между этими разнородными приложениями будет сложным. Так же будет сложность кода для осуществления этого обмена данными.
Одним из методов, используемых для борьбы с этой сложностью, является использование XML (Extensible Markup Language) в качестве промежуточного языка для обмена данными между приложениями.
Каждый язык программирования может понимать язык разметки XML. Следовательно, XML был использован в качестве основного средства для обмена данными.
Но нет стандартных спецификаций использования XML для обмена данными на всех языках программирования. Вот где приходит SOAP.
SOAP был разработан для работы с XML через HTTP и имеет некоторую спецификацию, которую можно использовать во всех приложениях. Мы рассмотрим более подробную информацию о протоколе SOAP в последующих главах.
Преимущества SOAP
SOAP — это протокол, используемый для обмена данными между приложениями. Ниже приведены некоторые из причин использования SOAP.
SOAP Строительные блоки
Спецификация SOAP определяет нечто, известное как « сообщение SOAP », которое отправляется веб-службе и клиентскому приложению.
На приведенной ниже схеме показаны различные строительные блоки сообщения SOAP.
Сообщение SOAP — это не что иное, как простой XML-документ, который имеет следующие компоненты.
Простой пример сложного типа показан ниже.
Предположим, что мы хотим отправить структурированный тип данных, который имеет комбинацию «Имя учебника» и «Описание учебника», тогда мы определим сложный тип, как показано ниже.
Структура сообщения SOAP
Следует отметить, что сообщения SOAP обычно автоматически генерируются веб-службой при ее вызове.
Всякий раз, когда клиентское приложение вызывает метод в веб-службе, веб-служба автоматически создает сообщение SOAP, в котором будут содержаться необходимые данные, которые будут отправлены из веб-службы клиентскому приложению.
Как обсуждалось в предыдущем разделе, простое сообщение SOAP имеет следующие элементы:
Давайте рассмотрим приведенный ниже пример простого сообщения SOAP и посмотрим, что на самом деле делает элемент.
Теперь вышеуказанное SOAP-сообщение будет передаваться между веб-службой и клиентским приложением.
Вы можете увидеть, насколько полезна вышеуказанная информация для клиентского приложения. Сообщение SOAP сообщает клиентскому приложению, как называется веб-служба, а также какие параметры она ожидает, а также тип каждого параметра, принимаемого веб-службой.
Элемент конверта SOAP
Первый бит строительного блока — конверт SOAP.
Конверт SOAP используется для инкапсуляции всех необходимых деталей сообщений SOAP, которыми обмениваются веб-служба и клиентское приложение.
Элемент конверта SOAP используется для указания начала и конца сообщения SOAP. Это позволяет клиентскому приложению, которое вызывает веб-службу, знать, когда заканчивается сообщение SOAP.
Следующие пункты могут быть отмечены в элементе конверта SOAP.
Ниже приведен пример версии 1.2 элемента конверта SOAP.
Сообщение о неисправности
Когда выполняется запрос к веб-службе SOAP, возвращаемый ответ может иметь либо 2 формы, которые являются успешным ответом, либо ответом об ошибке. При успешном генерировании ответ от сервера всегда будет SOAP-сообщением. Но если генерируются ошибки SOAP, они возвращаются как ошибки «HTTP 500».
Сообщение о сбое SOAP состоит из следующих элементов.
Пример сообщения об ошибке
Пример сообщения об ошибке приведен ниже. Ошибка генерируется, если сценарий, в котором клиент пытается использовать метод с именем TutorialID в классе GetTutorial.
Приведенное ниже сообщение об ошибке генерируется в том случае, если метод не существует в определенном классе.
Вывод:
Когда вы выполните приведенный выше код, он покажет ошибку типа «Не удалось найти метод (GetTutorialID) в классе (GetTutorial)»
Модель связи SOAP.
Вся связь по SOAP осуществляется по протоколу HTTP. До SOAP многие веб-сервисы использовали стандартный стиль RPC (удаленный вызов процедур) для связи. Это был самый простой тип общения, но у него было много ограничений.
Давайте рассмотрим диаграмму ниже, чтобы увидеть, как работает эта связь. В этом примере давайте предположим, что на сервере размещен веб-сервис, который предоставил 2 метода:
При обычной связи в стиле RPC клиент просто вызывает методы в своем запросе и отправляет необходимые параметры на сервер, а затем сервер отправляет желаемый ответ.
Приведенная выше модель связи имеет следующие серьезные ограничения
Чтобы преодолеть все ограничения, указанные выше, SOAP будет использовать следующую модель связи
Практический пример 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 щелкните пункт меню Файл-> Новый проект.
После того, как вы нажмете на опцию «Новый проект», Visual Studio предоставит вам другое диалоговое окно для выбора типа проекта и предоставления необходимых деталей проекта. Это объясняется на следующем шаге.
Шаг 2) На этом этапе
После этого вы увидите файл проекта, созданный в обозревателе решений в Visual Studio 2013.
Шаг 3) На этом этапе
Мы собираемся добавить файл веб-службы в наш проект
Шаг 4) Добавьте следующий код в файл asmx Tutorial Service.
Объяснение кода:
Если код выполнен успешно, при запуске кода в браузере будет показан следующий вывод.
Вывод:
Запрос SOAP, который генерируется при вызове веб-службы, показан ниже.
Объяснение кода:
Объяснение кода:
Резюме
SOAP — Краткое руководство
SOAP — это сокращение от Simple Object Access Protocol. Это протокол обмена сообщениями на основе XML для обмена информацией между компьютерами. SOAP является приложением спецификации XML.
Указывает на заметку
SOAP — это протокол связи, предназначенный для связи через Интернет.
SOAP может расширить HTTP для обмена сообщениями XML.
SOAP обеспечивает транспорт данных для веб-сервисов.
SOAP может обмениваться полными документами или вызывать удаленную процедуру.
SOAP может использоваться для трансляции сообщения.
SOAP не зависит от платформы и языка.
SOAP — это способ определения, какая информация отправляется и каким образом.
SOAP позволяет клиентским приложениям легко подключаться к удаленным службам и вызывать удаленные методы.
SOAP — это протокол связи, предназначенный для связи через Интернет.
SOAP может расширить HTTP для обмена сообщениями XML.
SOAP обеспечивает транспорт данных для веб-сервисов.
SOAP может обмениваться полными документами или вызывать удаленную процедуру.
SOAP может использоваться для трансляции сообщения.
SOAP не зависит от платформы и языка.
SOAP — это способ определения, какая информация отправляется и каким образом.
SOAP позволяет клиентским приложениям легко подключаться к удаленным службам и вызывать удаленные методы.
Хотя SOAP может использоваться в различных системах обмена сообщениями и может доставляться через различные транспортные протоколы, первоначальная цель SOAP — удаленные вызовы процедур, транспортируемые через HTTP.
Другие платформы, в том числе CORBA, DCOM и Java RMI, предоставляют функциональность, аналогичную SOAP, но сообщения SOAP написаны полностью на XML и поэтому уникально независимы от платформы и языка.
SOAP — структура сообщения
SOAP-сообщение — это обычный XML-документ, содержащий следующие элементы:
Конверт — определяет начало и конец сообщения. Это обязательный элемент.
Заголовок — содержит любые необязательные атрибуты сообщения, используемые при обработке сообщения, либо в промежуточной точке, либо в конечной конечной точке. Это необязательный элемент.
Тело — содержит данные XML, содержащие отправляемое сообщение. Это обязательный элемент.
Неисправность — необязательный элемент неисправности, который предоставляет информацию об ошибках, возникающих при обработке сообщения.
Конверт — определяет начало и конец сообщения. Это обязательный элемент.
Заголовок — содержит любые необязательные атрибуты сообщения, используемые при обработке сообщения, либо в промежуточной точке, либо в конечной конечной точке. Это необязательный элемент.
Тело — содержит данные XML, содержащие отправляемое сообщение. Это обязательный элемент.
Неисправность — необязательный элемент неисправности, который предоставляет информацию об ошибках, возникающих при обработке сообщения.
ПРИМЕЧАНИЕ. — Все эти характеристики могут быть изменены. Так что продолжайте обновлять себя новейшими спецификациями, доступными на сайте W3.
Структура сообщения SOAP
Следующий блок отображает общую структуру сообщения SOAP —
МЫЛО — Конверт
Конверт SOAP указывает начало и конец сообщения, чтобы получатель знал, когда было получено все сообщение. Конверт SOAP решает проблему определения того, когда вы получили сообщение и готовы его обработать. Поэтому конверт SOAP — это, по сути, механизм упаковки.
Указывает на заметку
Каждое сообщение SOAP имеет корневой элемент Envelope.
Конверт является обязательной частью сообщения SOAP.
Каждый элемент Envelope должен содержать ровно один элемент Body.
Если конверт содержит элемент заголовка, он должен содержать не более одного элемента и должен отображаться как первый дочерний элемент конверта перед телом.
Конверт изменяется при изменении версий SOAP.
Конверт SOAP указывается с использованием префикса пространства имен ENV и элемента Envelope.
SOAP-процессор, совместимый с v1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта v1.2.
SOAP-процессор, совместимый с v1.2, генерирует ошибку VersionMismatch, если он получает сообщение, которое не включает пространство имен конверта v1.2.
Каждое сообщение SOAP имеет корневой элемент Envelope.
Конверт является обязательной частью сообщения SOAP.
Каждый элемент Envelope должен содержать ровно один элемент Body.
Если конверт содержит элемент заголовка, он должен содержать не более одного элемента и должен отображаться как первый дочерний элемент конверта перед телом.
Конверт изменяется при изменении версий SOAP.
Конверт SOAP указывается с использованием префикса пространства имен ENV и элемента Envelope.
SOAP-процессор, совместимый с v1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта v1.2.
SOAP-процессор, совместимый с v1.2, генерирует ошибку VersionMismatch, если он получает сообщение, которое не включает пространство имен конверта v1.2.
v1.2-совместимое сообщение SOAP
Ниже приведен пример сообщения SOAP, совместимого с v1.2.
SOAP с HTTP POST
В следующем примере показано использование сообщения SOAP в операции HTTP POST, которая отправляет сообщение на сервер. Он показывает пространства имен для определения схемы конверта и для определения схемы правил кодирования. Ссылка OrderEntry в заголовке HTTP — это имя программы, которая будет вызываться на веб-сайте tutorialspoint.com.
ПРИМЕЧАНИЕ. — Привязка HTTP указывает местоположение службы.
SOAP — заголовок
Необязательный элемент Header предлагает гибкую структуру для указания дополнительных требований уровня приложения. Например, элемент Header может использоваться для указания цифровой подписи для служб, защищенных паролем. Кроме того, его можно использовать для указания номера учетной записи для сервисов SOAP с оплатой за использование.
Указывает на заметку
Это необязательная часть сообщения SOAP.
Элементы заголовка могут встречаться несколько раз.
Заголовки предназначены для добавления новых функций и возможностей.
Заголовок SOAP содержит записи заголовка, определенные в пространстве имен.
Заголовок закодирован как первый непосредственный дочерний элемент конверта SOAP.
Когда определены несколько заголовков, все непосредственные дочерние элементы заголовка SOAP интерпретируются как блоки заголовка SOAP.
Это необязательная часть сообщения SOAP.
Элементы заголовка могут встречаться несколько раз.
Заголовки предназначены для добавления новых функций и возможностей.
Заголовок SOAP содержит записи заголовка, определенные в пространстве имен.
Заголовок закодирован как первый непосредственный дочерний элемент конверта SOAP.
Когда определены несколько заголовков, все непосредственные дочерние элементы заголовка SOAP интерпретируются как блоки заголовка SOAP.
Атрибуты заголовка SOAP
Заголовок SOAP может иметь следующие два атрибута:
Атрибут актера
Протокол SOAP определяет путь сообщения как список узлов службы SOAP. Каждый из этих промежуточных узлов может выполнить некоторую обработку и затем переслать сообщение следующему узлу в цепочке. Устанавливая атрибут Actor, клиент может указать получателя заголовка SOAP.
Атрибут MustUnderstand
Указывает, является ли элемент Header необязательным или обязательным. Если установлено значение true, получатель должен понимать и обрабатывать атрибут Header в соответствии с его определенной семантикой или возвращать ошибку.
В следующем примере показано, как использовать заголовок в сообщении SOAP.
МЫЛО — Тело
Тело SOAP является обязательным элементом, который содержит определяемые приложением данные XML, которыми обмениваются в сообщении SOAP. Тело должно содержаться в конверте и должно следовать всем заголовкам, которые могут быть определены для сообщения.
Тело определяется как дочерний элемент оболочки, а семантика для тела определяется в связанной схеме SOAP.
Тело содержит обязательную информацию, предназначенную для конечного получателя сообщения. Например —
В приведенном выше примере запрашивается расценка компьютерных комплектов. Обратите внимание, что элементы m: GetQuotation и Item выше являются специфичными для приложения элементами. Они не являются частью стандарта SOAP.
Вот ответ на вышеуказанный запрос —
Обычно приложение также определяет схему, содержащую семантику, связанную с элементами запроса и ответа.
МЫЛО — Неисправность
Если во время обработки возникает ошибка, ответ на сообщение SOAP является элементом ошибки SOAP в теле сообщения, и ошибка возвращается отправителю сообщения SOAP.
Механизм сбоя SOAP возвращает конкретную информацию об ошибке, включая предопределенный код, описание и адрес процессора SOAP, который сгенерировал сбой.
Указывает на заметку
Сообщение SOAP может содержать только один блок отказа.
Ошибка является необязательной частью сообщения SOAP.
Для привязки HTTP успешный ответ связан с диапазоном кодов состояния от 200 до 299.
Ошибка SOAP связана с диапазоном кодов состояния от 500 до 599.
Сообщение SOAP может содержать только один блок отказа.
Ошибка является необязательной частью сообщения SOAP.
Для привязки HTTP успешный ответ связан с диапазоном кодов состояния от 200 до 299.
Ошибка SOAP связана с диапазоном кодов состояния от 500 до 599.
Подэлементы неисправности
Ошибка SOAP имеет следующие подэлементы —
Sr.No | Подэлемент и описание | ||
---|---|---|---|
1 |
Sr.No | Ошибка и описание |
---|---|
1 |