- SOAP расшифровывается как Simple Object Access P rotocol
- SOAP является протоколом связи прикладных программ
- SOAP представляет собой формат для отправки и получения сообщений
- SOAP не зависит от платформы
- SOAP основан на XML
- SOAP является рекомендацией W3C
Почему SOAP?
Это важно для веб-приложений, чтобы иметь возможность общаться через Интернет.
Лучший способ для обмена данными между приложениями через HTTP является, потому что HTTP поддерживается всеми браузерами и серверами. SOAP был создан для достижения этой цели.
SOAP предоставляет способ для обмена данными между приложениями, работающими на различных операционных системах, с различными технологиями и языками программирования.
SOAP Строительные блоки
Сообщение SOAP представляет собой обычный XML-документ, содержащий следующие элементы:
- Элемент Конверт, который идентифицирует документ XML как сообщение SOAP
- Элемент заголовка, который содержит информацию заголовка
- Элемент Body, который содержит вызов и ответ информацию
- Элемент ошибки, содержащий ошибки и информацию о состоянии
Все элементы выше объявлены в пространстве имен по умолчанию для SOAP-конверта:
http://www.w3.org/2003/05/soap-envelope/
и пространство имен по умолчанию для кодирования SOAP и типов данных:
http://www.w3.org/2003/05/soap-encoding
Синтаксические правила
Вот некоторые важные правила синтаксиса:
- Сообщение SOAP ДОЛЖЕН быть закодирован с использованием XML
- Сообщение SOAP ДОЛЖЕН использовать пространство имен SOAP Envelope
- Сообщение SOAP ДОЛЖЕН использовать пространство имен SOAP Encoding
- Сообщение SOAP не должен содержать ссылку DTD
- Сообщение SOAP не должен содержать XML Инструкции по обработке
Скелет сообщений SOAP
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
SOAP Envelope Элемент
Необходимый элемент SOAP Envelope является корневым элементом сообщения SOAP. Этот элемент определяет документ XML как сообщение SOAP.
пример
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
XMLNS: мыло пространство имен
Обратите внимание на XMLNS: пространство имен мыло в приведенном выше примере. Он всегда должен иметь значение: "http://www.w3.org/2003/05/soap-envelope/" .
Пространство имен определяет Конверт как конверт SOAP.
Если другое пространство имен используется приложение генерирует сообщение об ошибке и отбрасывает сообщение.
encodingStyle Атрибут
encodingStyle атрибут используется для определения типов данных , используемых в документе. Этот атрибут может появиться на любом SOAP-элемента, и применяет к содержанию элемента и всех дочерних элементов.
Сообщение SOAP не имеет кодировку по умолчанию.
Синтаксис
soap:encodingStyle="URI"
пример
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
SOAP-заголовка элемента
Необязательный элемент SOAP - заголовок содержит информацию конкретного приложения (like authentication, payment, etc) , (like authentication, payment, etc) о сообщении SOAP.
Если элемент заголовка присутствует, то он должен быть первым дочерним элементом элемента Envelope.
Note: Все непосредственные дочерние элементы элемента заголовка должны быть квалифицированы пространством имен.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
В приведенном выше примере содержит заголовок с "Trans" стихией, "mustUnderstand" атрибут со значением 1, а значение 234.
SOAP определяет три атрибуты в пространстве имен по умолчанию. Эти атрибуты: MustUnderstand, актер, и encodingStyle.
Атрибуты, определенные в заголовок SOAP определяет, каким образом получатель должен обрабатывать сообщение SOAP.
mustUnderstand Атрибут
Атрибут SOAP MustUnderstand может быть использован, чтобы указать, является ли обязательным или необязательным для получателя, чтобы обработать запись заголовка.
Если добавить MustUnderstand = "1" на дочерний элемент элемента заголовка это указывает на то, что обработка заголовка приемник должен распознать элемент. Если приемник не распознает элемент он потерпит неудачу при обработке заголовка.
Синтаксис
soap:mustUnderstand="0|1"
пример
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
actor Атрибут
Сообщение SOAP может перемещаться от отправителя к получателю, передавая различные конечные точки вдоль пути сообщения. Тем не менее, не все части сообщения SOAP могут быть предназначены для конечной конечной точки, вместо этого, он может быть предназначен для одного или нескольких конечных точек на пути передачи сообщения.
Атрибут SOAP актер используется для адресации элемента заголовка к конкретной конечной точке.
Синтаксис
soap:actor="URI"
пример
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:actor="http://www.w3ii.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
encodingStyle Атрибут
encodingStyle атрибут используется для определения типов данных , используемых в документе. Этот атрибут может появиться на любом SOAP-элемент, и он будет относиться к содержанию этого элемента и всех дочерних элементов.
Сообщение SOAP не имеет кодировку по умолчанию.
Синтаксис
soap:encodingStyle="URI"
SOAP Элемент Body
Необходимый элемент SOAP Body содержит фактический SOAP-сообщение, предназначенное для конечной конечной части сообщения.
Непосредственные дочерние элементы элемента SOAP Body может быть пространством имен квалифицированы.
пример
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3ii.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
Приведенный выше пример запрашивает цену яблок. Обратите внимание, что м: GetPrice и элементы товара выше конкретного приложения элементы. Они не являются частью пространства имен SOAP.
Ответ SOAP может выглядеть следующим образом:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
SOAP Элемент ошибки
Необязательный элемент SOAP Fault используется для указания сообщения об ошибках.
Элемент SOAP Fault имеет ошибки и информацию о состоянии для сообщения SOAP.
Если элемент присутствует неисправность, то она должна выглядеть как дочерний элемент элемента Body. Элемент Fault может появиться только один раз в сообщении SOAP.
Элемент SOAP Fault имеет следующие подразделы элементы:
Sub Элемент | Описание |
---|---|
<faultcode> | Код для идентификации неисправности |
<faultstring> | Приспособленная для чтения человеком объяснение неисправности |
<faultactor> | Информация о том, кто вызвал сбой произойдет |
<detail> | Содержит информацию об ошибках приложений, связанных с конкретным элементом Body |
Коды неисправностей SOAP
Значения faultcode, определенные ниже, должны быть использованы в элементе faultcode при описании неисправностей:
ошибка | Описание |
---|---|
VersionMismatch | Найдено недопустимое пространство имен для элемента SOAP Envelope |
MustUnderstand | Непосредственным дочерним элементом элемента заголовка, с mustUnderstand атрибут установлен в "1" , не понял |
Client | Сообщение было неправильно сформирован или содержали неправильную информацию |
Server | Существовал проблема с сервером, так что сообщение не может продолжить |
Протокол HTTP
HTTP связь по протоколу TCP / IP. Клиент HTTP подключается к серверу HTTP с использованием протокола TCP. После установления соединения, клиент может отправить сообщение запроса на HTTP-сервер:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
Сервер обрабатывает запрос и отправляет ответ HTTP обратно клиенту. Ответ содержит код состояния, который указывает статус запроса:
200 OK
Content-Type: text/plain
Content-Length: 200
В приведенном выше примере, сервер возвратил код состояния 200. Это стандартный код успеха для HTTP.
Если сервер не может декодировать запрос, он мог бы вернуться что-то вроде этого:
400 Bad Request
Content-Length: 0
SOAP Binding
Спецификация SOAP определяет структуру сообщений SOAP, не так, как они обмениваются. Этот пробел заполняется тем , что называется "SOAP Bindings" . SOAP привязок механизмы, которые позволяют SOAP сообщения, которые будут эффективно обмениваться с использованием транспортного протокола.
Большинство реализаций SOAP обеспечивают привязки для обычных транспортных протоколов, таких как HTTP или SMTP.
HTTP является синхронным и широко используется. Запрос SOAP HTTP указывает, по меньшей мере, два HTTP заголовки: Content-Type и Content-Length.
SMTP является асинхронным и используется в крайнем случае или частных случаев.
Java реализаций SOAP обычно предоставляют специфического связывания для JMS (Java Messaging System) протокола.
Тип содержимого
Content-Type заголовка для запроса SOAP и ответа определяет тип MIME для сообщения и кодировки символов (optional) , используемого для XML тела запроса или ответа.
Синтаксис
Content-Type: MIMEType; charset=character-encoding
пример
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
Заголовок Content-Length для запроса SOAP и ответа определяет количество байтов в теле запроса или ответа.
Синтаксис
Content-Length: bytes
пример
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
SOAP-пример
В приведенном ниже примере запрос GetStockPrice отправляется на сервер. Запрос имеет параметр StockName, и параметр цены, который будет возвращен в ответе. Пространство имен для функции определяется в "http://www.example.org/stock" .
Запрос 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/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/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:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>