Введение

Протокол обмена сообщениями для веб-сервисов, протокол компьютерной сети.

SOAP (ранее акроним от Simple Object Access Protocol) — это спецификация протокола обмена сообщениями для обмена структурированной информацией при реализации веб-сервисов в компьютерных сетях. Он использует XML Information Set в качестве формата сообщений и опирается на протоколы прикладного уровня, чаще всего Hypertext Transfer Protocol (HTTP), хотя некоторые устаревшие системы используют Simple Mail Transfer Protocol (SMTP) для согласования и передачи сообщений. SOAP позволяет разработчикам вызывать процессы, выполняющиеся на различных операционных системах (таких как Windows, macOS и Linux), для аутентификации, авторизации и обмена данными с использованием расширяемого языка разметки (XML). Поскольку веб-протоколы, такие как HTTP, установлены и функционируют практически на всех операционных системах, SOAP позволяет клиентам вызывать веб-сервисы и получать ответы независимо от языка программирования и платформы.

История

SOAP был разработан как протокол доступа к объектам и выпущен в виде XML RPC в июне 1998 года в составе Frontier 5.1 Дэйвом Винером, Доном Боксом, Бобом Аткинсоном и Мохсеном Аль Госеином для Microsoft, где работали Аткинсон и Аль Госейн. Спецификация стала доступной только после её представления в IETF 13 сентября 1999 года. По словам Дона Бокса, это было связано с внутренней политикой Microsoft. Из-за нерешительности Microsoft, Дэйв Винер выпустил XML RPC в 1998 году. Представленный черновик интернет-стандарта не получил статус RFC и, следовательно, не считается "веб-стандартом" в строгом смысле этого слова. Версия 1.1 спецификации была опубликована как заметка W3C 8 мая 2000 года. Поскольку версия 1.1 не достигла статуса рекомендации W3C, её также нельзя считать "веб-стандартом". Однако версия 1.2 спецификации стала рекомендацией W3C 24 июня 2003 года. Изначально SOAP расшифровывался как "Simple Object Access Protocol" (Простой протокол доступа к объектам), но версия 1.2 стандарта отказалась от использования этой аббревиатуры. Спецификация SOAP поддерживалась рабочей группой XML Protocol Working Group Консорциума Всемирной паутины до закрытия группы 10 июля 2009 года. После первого представления SOAP стал базовым уровнем для более сложного набора веб-сервисов, основанных на WSDL, XSD и UDDI. Эти различные сервисы, особенно UDDI, оказались гораздо менее востребованными, но понимание их роли позволяет полностью осознать предполагаемую роль SOAP и то, как веб-сервисы фактически развивались.

Терминология SOAP

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

Понятия протокола

SOAP Это набор правил, формализующих и определяющих формат и правила обработки информации, обмениваемой между отправителем SOAP и получателем SOAP. Узлы SOAP – это физические или логические машины с вычислительными ресурсами, используемые для передачи, пересылки, приема и обработки сообщений SOAP. Они аналогичны узлам в компьютерной сети. Роли SOAP На пути следования сообщения SOAP каждый узел выполняет определенную роль. Роль узла определяет действие, которое он выполняет с полученным сообщением. Например, роль "нет" означает, что узел не будет обрабатывать заголовок SOAP каким-либо образом и просто перенаправит сообщение по своему пути. Связь протоколов SOAP Для передачи по сети сообщение SOAP должно работать в сочетании с другими протоколами. Например, сообщение SOAP может использовать TCP в качестве протокола нижнего уровня для передачи данных. Эти связи определяются в рамках структуры связей протоколов SOAP. Функциональные возможности SOAP SOAP предоставляет только основу для обмена сообщениями. Однако ее можно расширить, добавив такие возможности, как надежность, безопасность и т.д. При добавлении функциональных возможностей в основу SOAP необходимо соблюдать определенные правила. Модуль SOAP – это набор спецификаций, определяющих семантику заголовка SOAP для описания новых функциональных возможностей, расширяющих SOAP. Модуль должен реализовывать ноль или более функциональных возможностей. SOAP требует, чтобы модули соответствовали установленным правилам.

Концепции инкапсулирования данных

Сообщение SOAP представляет информацию, обмениваемую между двумя узлами SOAP. SOAP-конверт — это оборачивающий элемент XML-сообщения, идентифицирующий его как сообщение SOAP. Блок заголовка SOAP Заголовок SOAP может содержать несколько таких блоков, каждый из которых является отдельным вычислительным блоком внутри заголовка. Как правило, информация о роли SOAP используется для адресации узлов в пути следования сообщения. Блок заголовка считается адресованным узлу SOAP, если роль SOAP для этого блока соответствует имени роли, в которой работает данный узел SOAP. (Например, блок заголовка SOAP с атрибутом роли ultimateReceiver адресован только конечному узлу назначения, который имеет эту роль. Заголовок с атрибутом роли next адресован каждому промежуточному узлу, а также конечному узлу назначения.) SOAP-заголовок — это совокупность одного или нескольких блоков заголовков, адресованных каждому SOAP-приемнику. SOAP-тело содержит основную часть сообщения, предназначенную для SOAP-приемника. Интерпретация и обработка SOAP-тела определяются блоками заголовка. SOAP-ошибка Если узел SOAP не может обработать сообщение SOAP, он добавляет информацию об ошибке в элемент SOAP-ошибки. Этот элемент содержится внутри SOAP-тела как дочерний элемент.

Понятия отправителя и получателя сообщений

Отправитель SOAP Узел, передающий сообщение SOAP. Приемник SOAP Узел, принимающий сообщение SOAP (может быть промежуточным или конечным узлом). Путь сообщения SOAP Последовательность узлов, через которые прошло сообщение SOAP для достижения конечного узла назначения. Исходный отправитель SOAP Узел, инициировавший передачу сообщения SOAP. Является началом пути сообщения SOAP. SOAP-посредник Любой узел между исходным отправителем и конечным приемником SOAP. Он обрабатывает блоки заголовков SOAP, адресованные ему, и пересылает сообщение SOAP конечному получателю. Конечный получатель SOAP Конечный пункт назначения сообщения SOAP. Этот узел отвечает за обработку тела сообщения и любых блоков заголовков, адресованных ему.

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

Характерная нейтральность SOAP делает его пригодным для использования с любым транспортным протоколом. Реализации часто используют HTTP в качестве транспортного протокола, но могут применяться и другие популярные протоколы. Например, SOAP также может использоваться поверх SMTP, JMS и очередей сообщений. SOAP, в сочетании с обменом HTTP-запросами и ответами, легко проходит через существующие брандмауэры и прокси-серверы и, следовательно, не требует изменения широко распространенной вычислительной и коммуникационной инфраструктуры, предназначенной для обработки HTTP-запросов и ответов. SOAP имеет в своем распоряжении все возможности XML, включая простую интернационализацию и расширяемость с использованием XML-пространств имен.

Недостатки

При использовании стандартной реализации и привязки SOAP/HTTP по умолчанию, XML-инфосет сериализуется в XML. Для повышения производительности в особом случае XML с внедренными двоичными объектами был представлен Механизм оптимизации передачи сообщений. При использовании HTTP в качестве транспортного протокола и без использования Web Services Addressing или шины интеграции предприятия (Enterprise Service Bus), роли взаимодействующих сторон фиксированы. Только одна сторона (клиент) может использовать сервисы другой. SOAP не так "прост", как следует из названия. Многословность протокола, медленная обработка XML и отсутствие стандартизированной модели взаимодействия привели к доминированию сервисов, использующих протокол HTTP напрямую. Например, REST. Поскольку SOAP не зависит от конкретного протокола, он не может воспользоваться преимуществами специфических функций и оптимизаций протоколов, таких как унифицированный интерфейс REST или кэширование, а вынужден реализовывать их заново (как в случае с WS Addressing).