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

Как было приведено выше, общение Web-сервисов ведётся в формате XML, однако это решает лишь половину проблемы. Приложения могут разобрать сообщение, однако им неизвестно, что делать с полученным после анализа результатом. Инструкция, описывающая правила форматирования сообщений XML для Web-сервисов известна как SOAP. В нем определена структура сообщений, благодаря чему программы знают, как отправлять и интерпретировать данные.

Базовая структура сообщения SOAP

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

FOO

Следующий пример иллюстрирует запрос SOAP, называемый GetLastTradePrice, который позволяет клиенту послать запрос о последних котировках определенных акций. POST/StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset=”utf-8” Content-Length: nnnn SOAPAction: “Some-URI”

DIS

В первых пяти строчках (часть заголовка HTTP) указывается тип сообщения (POST), хост, тип и длина информационного наполнения, а заголовок SOAPAction определяет цель запроса SOAP. Само сообщение SOAP представляет собой документ XML, где сначала идет конверт SOAP, затем элемент XML, который указывает пространство имен SOAP и атрибуты, если таковые имеются. Конверт SOAP может включать в себя заголовок (но не в данном случае), за которым следует тело SOAP. В нашем примере в теле содержится запрос GetLastTradePrice и символ акций, для которых запрашиваются последние котировки. Ответ на этот запрос может выглядеть следующим образом. Курс лекций «Техологии разработки программного обеспечения» 323 HTTP/1.1 200 OK Content-Type: text/xml; charset=”utf-8” Content-Length: nnnn

34,5

</SOAP-ENV:Envelope> И опять-таки первые три строки — это часть заголовка HTTP; само сообщение SOAP состоит из конверта, который содержит ответ на исходный запрос, помеченный GetLastTradePriceResponse, и включает в себя возвращаемое значение, в нашем случае 34,5. Примечание: Хотя формат SOAP стандартен и имеет одинаковые инструкции, необходимо помнить, что разные производители могут немного по-разному воплощать эти инструкции. Например, структура именных пространств и XML в сообщении SOAP, сгенерированном Apache Axis может сильно отличаться от структуры, сгенерированной Microsoft .NET. Однако правильно написанный клиент или сервер может обработать любое правильно написанное в соответствии с инструкциями SOAP сообщение. На случай проблем в теле SOAP содержится информация об ошибке в форме SOAP Fault. Fault - это структура XML, содержащая описание ошибки, например:

SOAP-ENV:Server Server Error Database not available

Курс лекций «Техологии разработки программного обеспечения» 324 Хотя сообщение SOAP и хранится в текстовом виде в формате XML, из-за специфичности определений пространств имен и свойств элементов его порой бывает непросто понять или интерпретировать вручную. К счастью, программ и библиотек, способных создать или интерпретировать вам сообщение SOAP, много, и они берут на себя большую часть сложностей.