Windows DNA 2000 — платформа нового тысячелетия
Протокол Simple Object Access Protocol (SOAP)
Протокол SOAP — это протокол на основе XML/HTTP для независимого от платформы доступа к сервисам, объектам и серверам. В настоящее время данный протокол находится в стадии реализации для COM, Perl и Java. Чтобы понять работу протокола SOAP, давайте рассмотрим небольшой пример. Предположим, что существует некоторый электронный магазин, торгующий радиоаппаратурой и позволяющий размещать заказы на товары через протокол SOAP. Также предположим, что синтаксис такого заказа выглядит следующим образом:
Boolean (PlaceOrder([in] Model string, [in] Manufacturer string, [out] DaysToGet integer);
Когда клиент выполняет заказ, он передает две строки — номер модели и производителя. Отработанный заказ возвращает статус и число дней, требуемых для исполнения заказа. Предположим, мы хотим заказать для своего домашнего кинотеатра звуковой процессор фирмы Sony, модель SDP E-300. Когда вызывается приведенный выше метод, информация передается по протоколу HTTP в формате SOAP и может выглядеть так:
POST /GoodiesServer HTTP/1.1 Host: www.ehome.ru Content-Type: text/xml-SOAP Content-Length: 100 MessageType: Call <SerializeStream> <PlaceOrder> <Model>SDP E-300</Model> <Manufacturer>Sony</Manufacturer> </PlaceOrder> </SerializeStream>
Как видим, запрос посылается с помощью обычного POST-глагола протокола HTTP. Его приемником будет приложение GoodiesServer, расположенное на сервере www.ehome.ru. Содержимое отсылаемого запроса имеет тип text/xml-SOAP — тип, задаваемый протоколом SOAP, а его длина равна 100 байт. Заголовок MessageType указывает на то, что запрос содержит вызов процедуры. Далее следует XML-текст самого запроса. В нем указана процедура в нашем примере: — PlaceOrder и передаваемые ей параметры.
Сервер может ответить на такой запрос следующим образом:
HTTP/1.1 200 OK Connection: close Content-Type: text/xml-SOAP Content-Length: 120 MessageType: CallResponse <SerializeStream> <PlaceOrderResponse> <_return>1</_return> <DaysToGet>3</DaysToGet> </PlaceOrderResponse> </SerializeStream>
Это стандартный HTTP-ответ с кодом 200, возвращающий информацию в формате XML. Отметим, что ответ процедуры PlaceOrder называется PlaceOrderResponse и содержит возвращаемое значение (1-true) и запрашиваемый параметр. Такой обмен SOAP-информацией по протоколу HTTP может быть обработан любым средством, позволяющим отсылать и получать HTTP-запросы и «понимающим» язык XML. Наиболее просто это реализуется на базе Internet Information Server с помощью Active Server Pages (ASP).
Протокол SOAP позволяет задавать следующие типы данных: целочисленные и с плавающей точкой, строки в формате UNICODE, байтовые строки, булевы значения, дату и время, вариантные типы и объединения, структуры, записи и массивы.
Таким образом, SOAP представляет собой простой и гибкий механизм для отсылки запросов и получения ответов через HTTP, вызова удаленных методов (RPC) без каких-либо изменений существующих приложений. Более того, данный протокол не связан с какой-либо объектной моделью и может использоваться в различных бизнес-сценариях. Осталось только дождаться его реализации, которая должна произойти уже к началу этого года.
Архитектура протокола SOAP показана на следующем рисунке:
Версию 0.9 спецификации SOAP можно найти по адресу http://msdn.microsoft.com/xml/general/soaptemplate.asp или http://www.ietf.org/internet-drafts/draft-box-http-soap-00.txt
Среди основных «конкурентов» протокола SOAP можно выделить следующие протоколы:
- Coins (http://www.jxml.com/coins/index.html) — протокол на основе XML для взаимодействия компонентов JavaBeans;
- DCOM — RPC-протокол фирмы Microsoft, «привязанный» к технологии COM;
- IIOP — наиболее близкий «конкурент» SOAP. Этот протокол связан с объектной моделью CORBA, требует конфигурации и вряд ли может расцениваться как универсальный RPC-протокол;
- Java RMI — связан с Java и специфичен для данного языка;
- KOML (http://www.inria.fr/koala/xml/serialization) — Koala Object Markup Language предоставляет способ управления Java-объектами через XML. Схож с XMOP, но более связан с Java;
- SODL (http://jabr.ne.mediaone.net/documents/sold.htm) — Simple Object Definition Language — способ задания описателей DTD для XMOP. По назначению близок к Component Description Language (CDL) — специального XML-словаря, используемого в SOAP;
- WDDX (http://www.wddx.ord/understanding.htm) — представляет собой механизм обмена структурированными данными между приложениями. Является XML DTD и служит «словарем» для описания структур данных, используемых приложениями в переносимом, текстовом формате;
- XML-RPC (http://www.xmlrpc.com) — предшественник SOAP, основное предназначение которого — осуществление RPC по протоколу HTTP путем использования XML для разбора запросов;
- XMOP (http://jabr.ne.mediaone.net/documents/xmop.htm) — XML Metadata Object Persistence — задает стандартный, независимый от платформы способ сохранения объектов в XML-потоках. Для реализации RPC используются Java-механизмы;
- WIDL (http://www.w3.org/TR/NOTE-widl.htm) — Web Interface Definition Language — метаязык для реализации сервисной архитектуры над Web-ресурсами.