Методика SOAP обмена документами основана на схемах XML, ов деляющих форматы запросов и ответов. Эта методика обретает большую популярность, и кое-кто даже предсказывает, что она в нечном счете вытеснит методику вызова удаленных процедур. Дс точно четкое описание проблемы, связанной с кодированием инфог. ции в SOAP, из-за которой разработчики стремятся уйти от приме ния методики RPC, приводится по адресу http://msdn.mierosoft.co library/en-us/dnsoap/html/argsoape.asp.
Текст запроса в методике обмена документами практически не отлв ется от текста запроса RPC. Например, RPC-запрос из предыдуще раздела можно легко превратить в запрос по методике обмена дот
информация гься строго ( фечаются зш бывает на то, tepa нет соеда ытка вызова i Lent свидетел! торные попьи ерестроен.пример, отличающий¬ся от RPC-запроса:
<?xml version="1.0" encoding="utf-8" ?>
Обратите внимание на выделенную строку: здесь имя метода (add) и два операнда (ор1 и ор2) содержатся в одном элементе. Подобная конструк¬ция невозможна в RPC-запросах. Такая гибкость методики обмена до¬кументами основана на поддержке схем XML. Веб-служба может ру¬ководствоваться XML-схемой для проверки корректности структуры запроса, после чего поступать с информацией, содержащейся в запро¬се, по своему усмотрению. Те же самые правила относятся и к ответам: они могут походить на RPC-ответы или в корне отличаться от них, опять же благодаря поддержке схем XML.
Веб-службы, разрабатываемые с помощью Visual Studio .NET, по умолча¬нию реализуют методику обмена документами (хотя имеется возмож¬ность перейти к методике RPC, изменяя атрибуты основного программ¬ного кода).
Теперь у вас может возникнуть вопрос: где сохраняется схема XML-до¬кумента и как сделать ее доступной для клиента и веб-службы? Ответ на этот вопрос заключен в еще одной аббревиатуре - WSDL.
Язык описания веб-служб (Web Services Description Language, WSDL) -это еще один XML-подобный язык, который был создан специально для описания веб-служб или скорее даже для описания порядка обра¬щения к веб-службам. Получившаяся спецификация описывает очень компактный язык, обладающий необычайной гибкостью и учитываю¬щий необычайное многообразие вариантов применения. Эта разновид¬ность документов создается вручную только самыми ярыми поклонни¬ками XML. Обычно начальная версия документа WSDL создается с по¬мощью инструментального программного инструментария и лишь по¬том подгоняется вручную.
Ниже приводится пример типичного файла WSDL, описывающего арифметическую службу, состоящую из единственного метода сложе¬ния двух чисел (которую мы создали ранее):
<?xml version="1.0" encoding="utf-8"?>
Возвращает сумму двух вещественных чисел в виде вещественного числа
Содержит ряд простых арифметических функций
He забывайте, что этот файл WSDL описывает только один метод служ¬бы, который складывает два числа. С целью упрощения примера другие три метода, которые необходимо реализовать, были удалены из описа¬ния. Файл WSDL достаточно длинный и сложный, но необходимо по¬нимать назначение его разделов.
Корневой элемент документа вмещает в себя содер¬жимое файла и допускает объявление различных пространств имен. Следующий элемент содержит описание схемы документа XML, используемой службой. Внутри него находится элемент , описывающий формат представления всех элементов, которые мо¬гут появиться внутри элемента в теле запроса или ответа.
Первым в схеме описывается элемент odd />. Атрибут elementFormDefault элемента имеет значение qualified, поэтому предполагает¬ся, что элемент Odd /> принадлежит к пространству имен, описываемо¬му атрибутом targetNamespace, http://www.wrox.com/services/math. Да¬лее в элементе располагается последовательность из двух других элементов, <ор1 /> и <ор2 />. В обоих этих элементах атрибуты minOccurs и maxOccur имеют значение 1, т. е. каждый из них должен и может по¬явиться всего один раз. Кроме того, оба они имеют значение s: float в ат¬рибуте type, соответствующее одному из встроенных типов схем XML.
Полный список типов данных, описываемых схемой XML, можно найти по адре¬су www.w3.org/TR/xmlschems-0/'SCreatDt. Если для работы службы необходимы более сложные типы данных чем те, что приводятся в списке, их можно кон¬струировать на базе имеющихся.
Далее в описании схемы располагается элемент , описы¬вающий элемент OddResponse />. Определение этого элемента преду¬сматривает наличие одного дочернего элемента oddResult />, который
содержит результат операции (также определен как имеющий чщ s: float). Это последняя запись, включенная в схему документа.
Вернемся к основной части файла WSDL - здесь присутствует карей кий раздел, описывающий два элемента : addSoaffl и addSoapOut. В каждом из этих двух элементов имеется по одному эщ менту , которые посредством атрибута element определи используемые элементы в схеме XML. Оба они ссылаются на два, гих элемента - add и addResponse соответственно. Этот раздел описын| формат каждого сообщения.
Следующий раздел, , служит для группировки ментов в операции. Под операцией понимается едив^| модуль, выполняющий некоторое действие и потому обязательно вкя чающий в себя элемент , часто - и иногда! . В нашем примере единственный элемент и ссылаются на ранее описанные элемеваи . Кроме того, здесь присутствует элемент . В этом блоке описывается св операции с протоколом, определяющим взаимодействие со слуа Спецификация WSDL предусматривает три типа связи: SOAP, GET/POST и MIME.
В этой главе мы будем рассматривать только связь типа SOAP. Связь i па HTTP GET/POST описывает, как должны строиться URL (для запр типа GET) или как должны кодироваться данные формы (для запр типа POST). Связь типа MIME допускает возможность оформления, личных частей (составного) сообщения, обычно выходного, в разных ^ матах. Это означает, что одна часть ответа может иметь фор XML, а другая-HTML.
Более подробно об этих альтернативных видах связи рассказано по i cyvmw.w3.org/TR/2002/WD-wsdll2-bindings-20020709/.
Первый атрибут (name), представляющий имя связи, имеет значе MathSoap, а атрибут type указывает на раздел с имев MathSoap. Второй элемент, , через атрибут transport i ределяет протокол взаимодействия - HTTP. Элемент , может иметь любую структуру, а отправляющая и i
метода, который, в свою очередь, дол¬жен содержать по одному элементу для каждого входного параметра.
Элемент имеет два дочерних элемента, и , которые описывают формат запроса и ответа. В данном случае элемент содержит атрибут use со значением literal. На практике это единственное возможное значение атрибута для служб, построенных на базе обмена документами, а в службах, постро¬енных на базе RPC, допускается еще одно возможное значение, encoded, и в этом случае элемент должен был бы явно определить тип кодирования входных параметров.
В заключительной части документа, , описывается, как клиент должен производить вызов службы. Кроме того, здесь со¬держится описание службы и элемент , который ссылает¬ся на связь MathSoap в последней части документа. Пожалуй, самый важный элемент в данном разделе - это элемент , опре¬деляющий критически важный атрибут location, который содержит URL доступа к службе.
Содержит ряд простых арифметических функций
Перспектива иметь дело с полным файлом WSDL может отпугнуть на¬чинающих разработчиков, но на самом деле вам едва ли когда-нибудь придется вводить этот код вручную. Данный пример файла WSDL был автоматически сгенерирован веб-службой .NET, которая исследовала программный код и сгенерировала необходимый документ XML.
Схемы XML - это очень емкая тема, а ее обсуждение выходит далеко за рамки данной книги. Тем, кто захочет побольше узнать о схемах XML, рекомендуем книгу ^Beginning XML» 3-е издание (издательство Wiley Publishing, ISBN 0-7645-7077-3)1 или учебник, расположенный по адресу www.w3schools.com/schema/de-fauilasp.
Передача репрезентативного состояния (Representational State Trans¬fer - REST) описывает порядок применения протокола HTTP для передачи данных. Подход REST в основном задействуется в веб-слу но может применяться для построения любых систем типа запрос/ вет на базе протокола HTTP. Что касается веб-служб, то REST поз ет обращаться к заданному URL в определенном формате, чтобы чить данные (также в определенном формате). Эти данные могут жать дополнительную информацию о том, как получить дальне" данные, и, если они предназначаются для веб-служб, то возвращ в формате XML.
В качестве примера предположим, что сайт издательства Wrox ставляет способ получения списка всех своих авторов. Доступ к ным организован в виде веб-службы в стиле REST, возвращ список авторов издательства и размещенной по такому URL:
http://www.wrox.com/services/authors/
Эта служба может возвращать список авторов в формате XML на с описанием способа получения дополнительной информации о дом из них:
<?xml version="1.0" encoding="utf-8" ?> Outhors xmlns:xlink="http://www. w3. org/1999/xlink"
xmlns="http://www.wrox.com/services/authors-books" xlink:href="http://www.wrox.com/services/authors/">
В этом документе XML есть несколько важных моментов. Во-пер в нем объявлено пространство имен по умолчанию - http://www.vo com/services/authors-books, поэтому любые элементы без префи автоматически будут отнесены к данному пространству имен. То элемент, например Outhors />, будет отличаться от одноименного мента из другого пространства имен. Универсальный идентифика; ресурса для пространства имен http://www.wrox.com/services/aut books выступает лишь в качестве уникальной строки и не дает н ких гарантий, что по данному адресу вообще расположен некий суре. Суть здесь в том, что это универсальный идентификатор рес
(Uniform Resource Identifier - URI), а не универсальный указатель на ресурс (Uniform Resource Locator - URL), который указывает имен¬но на ресурс, располагающийся по данному адресу.
Во-вторых, обратите внимание на атрибут href из пространства имен http://www.w3.org/1999/xlink. Хотя это и не обязательно, но большин¬ство веб-служб в стиле REST стандартизовали такую нотацию, кото¬рая служит аналогом стандартной гиперссылки в HTML.
Язык XLink - это способ описания взаимосвязей между документами, далеко опередивший возможности обычных гиперссылок HTML. Он предоставляет возможность определить перекрестные ссылки между документами так, чтобы документы были доступны друг из друга, а кроме того позволяет опре¬делять порядок активизации ссылки - вручную, автоматически или по про¬шествии некоторого времени. Родственный ему XPointer имеет отношение к определению разделов внутри документа и был создан как более удобный способ описания ссылок, чем простые гиперссылки на страницах HTML.
Обе эти методики достигли уровня рекомендаций W3C, но пока не получили широкого распространения. За дополнительной информацией по этой теме обращайтесь по адресу www.w3.org/XML/Linking.
Документ XML, возвращенный REST-службой и предназначенный для веб-сайта или веб-приложения, пришлось бы преобразовать в бо¬лее дружественный формат (скорее всего в HTML) либо на стороне клиента, либо на стороне сервера, в результате чего могло бы полу¬читься примерно следующее:
AsTopi>i издательства Wrox
Майкл Кай (Michael Kay)
Джо Фосетт (Joe Fawcett)
Джереми Мак-пик (Jeremy McPeak)
Николас Закас (Nicholas Zakas)
После этого пользователь мог бы получить доступ к информации по ка¬ждому из авторов, просто перейдя по одной из ссылок, которая может в свою очередь вернуть документ XML, например такого содержания:
<?xml version="1.О" encoding="utf-8" ?>
Здесь снова фигурируют то же пространство имен http://www.wrox.co services/authors-books и атрибут xlink:href, который впоследствии может получить доступ к дополнительной информации. Эти данн представленные кодом HTML, могли бы выглядеть так:
<1:Ше>Сведения об авторе<ДШе>
<р>Сведения о
<а href="http://www.wrox.com/services/authors/fawcettj"> Джо Фосетт (Joe Fawcett) <р>Книги
Beginning XML
Professional Ajax
Пользователь опять получает возможность перейти по одной из лок, например « Professional Ajax», и получить в ответ снова XML-кумент:
<?xml version="1.О" encoding="utf-8" ?>
Web Programming Professional AJAX
Как использовать в своих интересах асинхронный JavaScript и XML, чт обогатить пользовательский интерфейс ваших веб-страниц.
Работа с веб-службами в стиле REST не отличается сложностью и сле¬дует повторяющемуся шаблону. Например, чтобы получить полный список авторов, можно обратиться по адресу http://www.wrox.com/ser¬vices /authors, а если добавить идентификатор автора в конец адресной строки, то можно получить сведения о конкретном авторе, например по адресу http://www.wrox.com/services/authors/fawcettj.
Служба может быть реализована многими способами. Это может быть статическая веб-страница или, что более вероятно, серверный сцена¬рий, например ASP, JSP или PHP, выполняющий некоторые действия по выборке сведений из базы данных и возвращающий сгенерирован¬ный документ XML. В этом случае конкретный URL должен быть ото¬бражен сервером в специфическую, зависящую от типа приложения ссылку к информации, например, вызовом хранимой процедуры из ба¬зы данных.
Дополнительную информацию о службах в стиле REST можно найти по адресу www. networkworld. сот/ее/2003/eerest. html.