19 августа 2019 года    
Понедельник | 18:10    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум



Сайт знакомств http://fotostrana.ru/search/.




Разделы / Интернет-технологии / XML

Предварительное знакомство с WS-I Basic Profile 1.1

Предварительное знакомство с WS-I Basic Profile 1.1

12-го августа 2003 г. представители организации WS-I (Web Services Interoperability Organization, Организация по развитию возможности взаимодействия Web-сервисов) объявили о выходе окончательной версии спецификации Basic Profile 1.0 - набора рекомендаций о том, как использовать стандарты Web-сервисов, чтобы улучшить совместимость. Для разработчиков, пользователей и поставщиков Web-сервисов и инструментов Web-сервисов это большой шаг вперед в достижении совместимости в стремительно развивающемся мире Web-сервисов. Однако, чем еще занималась эта организация?

Члены консорциума WS-I признают, что Basic Profile 1.0 - это только начало, предстоит долгий путь, пока Web-сервисы и их совместимость получат повсеместное распространение. В целях ускорения процесса признания Web-сервисов и продвижения принципа совместимости перед Рабочей группой Basic Profile, которая разработала одноименный документ, была поставлена задача по написанию следующей версии спецификации, в которой будет определено, как присоединять вложения (attachment). Так, в уставе группы записано:

"Рабочей группе поручено разрешить вопрос о включении поддержки вложений в будущую редакцию Basic Profile, которая по причине минимального количества изменений будет именоваться Basic Profile 1.1. Она должна опираться на Basic Profile 1.0, а также:
Примечание W3C "SOAP-сообщения с вложениями" (SOAP Messages with Attachments) от 11 декабря 2000г."

Итак, спецификация Basic Profile 1.1, как следует из ее названия, это следующая версия Basic Profile 1.0. Ее основу составляет Basic Profile 1.0, в нее также добавляется поддержка Примечания "SOAP-сообщения с вложениями" и Раздела 5 "Соединение MIME " (MIME Binding) из В рамках работы над этим документом Рабочие группы WS-I занимаются разработкой примеров приложений и инструментов тестирования для данной спецификации. Благодаря этому, на момент публикации окончательного варианта стандарта он получит необходимую апробацию и будет "отлажен". Как и нынешняя версия Basic Profile, эта редакция спецификации будет выпущена вместе с примерами приложений и инструментами тестирования.

Эта статья опирается на последний вариант Рабочей версии Basic Profile 1.1, написанием которой Рабочая группа занимается с января 2003г. В ходе работы над этим проектом члены группы выявили более 70 технических вопросов, которые требуют разрешения. "За бортом" осталось очень незначительное число вопросов. Повторимся, что в этой статье рассматривается Рабочая версия - в процессе разработки стандарта в некоторые ее разделы могут (и, наверняка, будут) внесены некоторые изменения.

Включения, SwA и совместимость

По мере того, как Web-сервисы получает все большие применение в "серьезных" приложениях, важным становится наличие стандарта, который описывал бы совместимые вложения и согласовывался бы с спецификациями SOAP 1.1 и WSDL 1.1. Существует несколько причин, по которым требуется применять вложения при передаче больших объемов данных: как бинарных, так и других документов XML. К достоинствам использования вложений можно отнести небольшой размер сообщений, менее строгие требования к памяти, уменьшение времени обработки (отсутствует необходимость преобразовывать бинарные данные в base-64) и, самое главное, перемещение данных потоком (streaming). Вложения позволяют приложениям использовать соответствующие API (интерфейсы прикладного программирования) для обработки данных в потоковом режиме. Это существенно повышает производительность при пересылке в SOAP-конверте объектов BLOB и CLOB из базы данных приложения. Преимущества вложений подробно описаны в следующих документах: "SOAP 1.2 Возможность вложений", "XML, SOAP и бинарные данные" ,"Рекомендуемое приложение Infoset к SOAP-приложениям с вложениями"  и "Механизм оптимизации передачи SOAP-сообщений" .Рабочая группа XMLP (XML Protocol) также занимается разработкой технологии вложений для SOAP 1.2.

Basic Profile 1.0 способствует поддержанию принципа совместимости на базовом уровне - SOAP 1.1, WSDL 1.1, UDDIv2 (см. "Спецификация интерфейса прикладного программирования для UDDI, версия 2.04"  и "Справочник структуры данных для UDDI версия 2.03" )и т.д. Однако, единственное, что не было учтено в Basic Profile 1.0, это поддержка вложений. А ведь использование вложений влияет на совместимость Web-сервисов с точки зрения пакетирования (packaging), форматирования (formatting) и сериализации (serialization).

Наиболее широко применяемая и признанная технология включений - это MIME (Multipurpose Internet Mail Extensions, Многоцелевые расширения электронной почты в сети Internet). SwA комбинирует MHTML и CID для указания частей MIME в SOAP. В Basic Profile 1.1 в качестве технологии вложений была выбрана SwA, а для описания SwA - Раздел 5 "MIME Binding" WSDL 1.1. В Basic Profile 1.1, как и в предыдущей версии этого стандарта, уточняется, корректируется и выделяется ряд соответствующих спецификаций с целью повышения совместимости и устранения двусмысленности. То есть рассматривается проблема, с которой сталкивались разработчики и пользователи Web-сервисов при манипулировании большими объемами бинарных данных и их передаче в конвертах SOAP 1.1.

Направленность Basic Profile 1.1 совпадает с позицией, избранной Рабочей группой XMLP в отношении вложений для SOAP 1.2, как записано в Рабочей версии спецификации "Механизм оптимизации передачи SOAP-сообщений" .Оба документа используют MIME и опираются на SwA. MTOM даже "идет дальше": он включает вложения как часть Infoset (поскольку SOAP 1.2 строится на Infoset), то есть модель обработки SOAP 1.2 также становится применимой к вложениям. Передаваемые сообщения в обоих случаях будут очень похожи. MTOM - это эволюционный подход в технологии вложений, подобный переходу от SOAP 1.1 к SOAP 1.2.

Описание вложений

Как указано в уставе Рабочей группы Basic Profile, добавление в разрабатываемый стандарт положения о поддержке вложений предусматривает обратную совместимость. Это означает, что все артефакты Basic Profile 1.0 (DESCRIPTION, MESSAGE, INSTANCE и т.д.) будут также совместимы и с Basic Profile 1.1. Для этого в Basic Profile 1.0 были удалены и изменены требования, согласно которым соединение (binding) ограничивается только SOAP HTTP, то есть теперь стало допустимым соединение SOAP HTTP, либо соединение MIME.

Хотя SwA довольно надежная спецификация, Раздел 5 "MIME Binding" Примечания WSDL 1.1 не совсем точно определен, что ведет к проблемам с совместимостью. Basic Profile 1.1 связывает этот раздел с SwA. Соединения MIME трактуются как нечто отличное от SwA. В Basic Profile 1.1 также исправлены двусмысленности соединений MIME, а также ошибки ("баги") в схеме соединений MIME.

Приведенный ниже фрагмент кода WSDL 1.1 демонстрирует, что можно делать с помощью Basic Profile 1.1 для стиля rpc/literal:

<wsdl:message name="msg-in">
    <wsdl:part name="photo-reference" type="xsd:anyURI"/>
    <wsdl:part name="photo-attachment" type="xsd:base64Binary"/>
</wsdl:message>

<wsdl:message name="msg-out">
    <wsdl:part name="result" type="xsd:string"/>
</wsdl:message>

<wsdl:portType name="my-portType">
    <wsdl:operation name="my-operation">
        <wsdl:input message="tns:msg-in"/>
        <wsdl:output message="tns:msg-out"/>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="my-binding" type="tns:my-portType">
    <soap:binding style="rpc" 
        transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="my-operation">
        <soap:operation soapAction="http://example.com/soapaction"/>
        <wsdl:input>
            <mime:multipartRelated>
                <mime:part>
                    <soap:body parts="photo-reference"
                        use="literal" 
                        namespace="http://example.com/some-namespace"/>
                </mime:part>
                <mime:part>
                    <mime:content part="photo-attachment"
                        type="application/octetstream"/>
                </mime:part>
            </mime:multipartRelated>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"
                namespace="http://example.com/some-namespace"/>
        </wsdl:output>
    </wsdl:operation>
 </wsdl:binding>

В этом фрагменте часть (part) photo-reference входного сообщения привязана к телу SOAP (SOAP Body), а часть (part) photo-attachment - к отдельной части (part) MIME. Ниже приведен пример входного сообщения для соединения my-binding:

MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=boundary; type=text/xml;
        start="<my-root-part@example.com>"
Content-Description: This is an optional message description.

--boundary
Content-Type: text/xml; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Content-ID: <my-root-part@example.com>

<?xml version="1.0" ?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Body xmlns:types="http://example.com/some-namespace">
        <types:my-operation>
            <photo-reference>cid:my-cool-photo@example.com</photo-reference>
        </types:my-operation>
    </env:Body>
</env:Envelope>

--boundary
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <my-cool-photo@example.com>

...binary photograph...
--boundary--

Заметим, что входное сообщение привязано к соединению MIME, а выходное - к соединению SOAP HTTP по Basic Profile 1.0. Basic Profile 1.1 допускает подобное смешение. На самом деле Basic Profile 1.1 "идет дальше" - если используемое соединение MIME, а тело SOAP (SOAP Body) - единственная перечисленная часть MIME, отправитель может отправить это сообщение, применяя соединение SOAP HTTP (если нет вложений) или соединение MIME.

Ниже приведен эквивалентный пример с такими же входным и выходным сообщениями. В этом фрагменте используется стиль document/literal вместо rpc/literal (заметим, что префикс types пространства имен привязан к URI (Uniform Resource Identifier, Универсальный идентификатор ресурса) для пространства имен http://example.com/some-namespace):

    <wsdl:types>
    <schema targetNamespace="http://example.com/some-namespace"
            xmlns="http://www.w3.org/2000/10/XMLSchema"
            elementFormDefault="unqualified">
        <element name="my-operation">
            <complexType>
                <sequence>
                    <element name="photo-reference" type="xsd:anyURI"/>
                </sequence>
            </complexType>
        </element>
        <element name="my-operationResponse">
            <complexType>
                <sequence>
                    <element name="result" type="xsd:string"/>
                <sequence>
            </complexType>
        </element>
    </schema>
</wsdl:types>

<wsdl:message name="msg-in-doc">
    <wsdl:part name="photo-reference-wrapper"
        element="types:my-operation"/>
    <wsdl:part name="photo-attachment"
        type="xsd:base64Binary"/>
</wsdl:message>
<wsdl:message name="msg-out-doc">
    <wsdl:part name="result-wrapper"
        element="types:my-operationResponse"/>
</wsdl:message>

<wsdl:portType name="my-portType-doc">
    <wsdl:operation name="my-operation-doc">
        <wsdl:input message="tns:msg-in-doc"/>
        <wsdl:output message="tns:msg-out-doc"/>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="my-binding-doc" type="tns:my-portType-doc">
    <soap:binding style="document"
        transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="my-operation-doc">
        <soap:operation soapAction="http://example.com/soapaction"/>
        <wsdl:input>
            <mime:multipartRelated>
                <mime:part>
                    <soap:body parts="photo-reference-wrapper"
                        use="literal"/>
                </mime:part>
                <mime:part>
                    <mime:content part="photo-attachment"
                        type="application/octetstream"/>
                </mime:part>
            </mime:multipartRelated>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

Указание вложений

Рассмотренные примеры позволяют Web-сервису описывать вложения, но это описание ничего не говорит о том, как указывать вложения из конверта SOAP (SOAP Envelope), а это самый обычный случай использования. Рассмотрим ситуацию, когда бинарные данные слишком велики, чтобы их встраивать в конверт SOAP. SwA позволяет передавать данные в качестве вложения, но их необходимо указывать из конверта SOAP. Благодаря такому подходу для более высоких уровней приложения неважно, встроены данные или отправлены как вложение. (Например, на Java для этого можно было бы воспользоваться javax.activation.DataHandler).

Basic Profile 1.1 решает проблему описания отношения указатель-указание, определяя тип swaRef во (временном) пространстве имен http://ws-i.org/profiles/basic/1.1/xsd (этот тип образован путем ограничения типа xsd:anyURI):

<xsd:schema targetNamespace="http://ws-i.org/profiles/basic/1.1/xsd"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsd:simpleType name="swaRef">
        <xsd:restriction base="xs:anyURI" />
    </xsd:simpleType>
</xsd:schema>

Basic Profile 1.1 требует, чтобы значение этого типа было разрешено в пакете MIME, то есть URI, который является значением этого типа в реальном документе, должен разыменовывать часть MIME в том же самом пакете MIME.

Благодаря этому отношения между указателем и указанием становится доступным для инструментов, которые смогут сгенерировать артефакты кода с богатой семантикой (например, сгенерировать ориентированные на поток интерфейсы для доступа к вложенным данным). Приложения могут использовать другие механизмы для выражения подобных отношений указатель-указание. Тип swaRef предоставляет унифицированный механизм идентификации указаний, которые ссылаются на вложения, и, следовательно, способствует обеспечению совместимости.

В рассмотренном выше примере со стилем rpc/literal тип части photo-reference входного сообщения может быть изменен на swaRef. Аналогично, для примера с document/literal тип элемента photo-reference в разделе wsdl:types также может быть изменен на swaRef. Из-за того, что элемент photo-reference в конверте SOAP (SOAP Envelope) указывает на часть MIME в том же самом пакете MIME, можно снова говорить о факте доступности в этом описании WSDL. Пример rpc/literal может быть модифицирован для использования этого нового типа следующим образом (заметим, что префикс bp11 пространства имен привязан к URI для пространства имен http://ws-i.org/profiles/basic/1.1/xsd):

<wsdl:message name="msg-in">
    <wsdl:part name="photo-reference" type="bp11:swaRef"/>
    <wsdl:part name="photo-attachment" type="xsd:base64Binary"/>
</wsdl:message>

<wsdl:message name="msg-out">
    <wsdl:part name="result" type="xsd:string"/>
</wsdl:message>

<wsdl:portType name="my-portType">
    <wsdl:operation name="my-operation">
        <wsdl:input message="tns:msg-in"/>
        <wsdl:output message="tns:msg-out"/>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="my-binding" type="tns:my-portType">
    <soap:binding style="rpc" 
        transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="my-operation">
        <soap:operation soapAction="http://example.com/soapaction"/>
        <wsdl:input>
            <mime:multipartRelated>
                <mime:part>
                    <soap:body parts="photo-reference"
                        use="literal"
                        namespace="http://example.com/some-namespace"/>
                </mime:part>
                <mime:part>
                    <mime:content part="photo-attachment"
                        type="application/octetstream"/>
                </mime:part>
            </mime:multipartRelated>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"
                namespace="http://example.com/some-namespace"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

Теперь процессор WSDL, обрабатывающий этот фрагмент кода WSDL, знает, что URI в теле SOAP (SOAP Body) является указанием на часть MIME в том же самом пакете MIME, и может генерировать соответствующие интерфейсы прикладного программирования для доступа к бинарным данным, которые отправляются как отдельная часть MIME. Ранее, когда тип swaRef еще не использовался, процессор WSDL не знал, разрешится ли значение URI в сообщении SOAP локально и разрешится ли вообще.

Заключение

Совместимые вложения - одна из функциональностей, которая столь необходима разработчикам и пользователям Web-сервисов. Рабочая группа Basic Profile решила эту проблему, включив SwA в Basic Profile 1.1, устранив двусмысленность и заполнив пробел в существующих спецификациях. Более того, Basic Profile 1.1 также позволяет средствам связывания языков генерировать соответствующие интерфейсы прикладного программирования, чтобы полностью реализовать возможности вложений.

Предварительное знакомство с WS-I Basic Profile 1.1
Лента новостей


2006 (c) Copyright Hardline.ru