Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
2005 г.

Использование Веб-сервисов в Caché

Гришина Мария, InterSystems

Веб-сервис представляет собой набор логически связанных функций (методов), которые могут быть программно вызваны через Internet (или Intranet). Таким образом, программы, написанные на различных языках программирования, функционирующие на различных серверах под управлением различных платформ могут обращаться к какой-нибудь программе, работающей на другом сервере (т.е. к Веб-свервису), и использовать ответ, полученный от нее на своем Веб-сайте, или приложении.

Веб-сервисы представляют собой особый вид Веб-приложений для создания уровня бизнес-логики и связи разнородных приложений на основе использования общих стандартов, а также открытых протоколов обмена и передачи данных. В основе технологии Веб-сервисов лежит язык XML eXtensible Markup Language – расширяемый язык разметки. Обмен данными между приложениями осуществляется с помощью стандартного протокола HTTP и некоторых других Internet протоколов.

Например, если вам необходимо встроить в свое приложение переводчик слов на различные иностранные языки (или прогноз погоды, гороскоп и т.п.), вы можете решать задачу различными способами. Можете, например, самостоятельно реализовать такую функциональность, а можете воспользоваться услугами Веб-сервиса, к которому Ваше приложение будет обращаться через Internet. Передавая такому Веб-сервису запрос с параметрами, например, слово для перевода и интересующий иностранный язык, получаете ответ, в котором будет содержаться результат выполнения вашего запроса. Далее вам остается только “красиво” отобразить этот ответ в своем приложении. При этом вам совершенно не обязательно знать детали внутренней реализации используемого Веб-сервиса (под управлением какой платформы функционирует, на каком языке программирования написан и т.п.), достаточно только знать какой метод вам нужен и формат вызова этого метода.

Можно выделить следующие варианты использования Веб-сервисов:

a) Реализация сервисов и предоставление их “внешним” потребителям за определенную плату;

b) Построение распределенных систем (чтобы не дублировать службу на нескольких серверах, а обращаться к ней через сеть);

c) Интеграция приложений, созданных на различных технологиях, использующих для обмена информацией механизм Веб-сервисов.

В рамках данной статьи будут рассмотрены основные принципы функционирования Веб-сервисов (Веб-служб). А также рассмотрена возможность использования технологии Веб-служб в Caché. Caché может обращаться к внешним Веб-службам, опубликованным в сети Internet/Intranet, отправлять запросы, получать результаты, т.е. являться клиентом Веб-служб. При этом, приложение на Caché может предоставлять определенную функциональность (набор методов), доступную внешним программам через Internet/Intranet, т.е. являться сервером Веб-служб. Далее будут рассмотрены оба этих механизма.

Рис. 1 иллюстрирует общие принципы работы механизма Веб-сервисов.


Рис. 1. Общие принципы работы Веб-служб

Итак, есть определенный сервер Веб-сервисов, реализующий некоторую функциональность (содержащий набор методов) и доступный в сети Internet/Intranet.

Для описания методов, опубликованных на данном сервере, а также формата их вызова используется специальный язык WSDL (Web Services Description Language). В основе языка WSDL лежит XML. Каждому серверу Веб-служб соответствует свой собственный WSDL-документ, на основании которого клиент формирует запросы к данному сервису.

Клиент (любой компьютер в сети) формирует запрос и отправляет его серверу Веб-служб. Для передачи запросов используется SOAP-протокол (Simple Object Access Protocol) – простой протокол доступа к объектам. Сообщение SOAP является обычным XML-документом, следовательно, не зависит ни от языка ни от платформы.

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

В основе механизма Веб-сервисов лежат три основные понятия: XML (eXtensible Markup Language), WSDL (Web Services Description Language) и SOAP (Simple Object Access Protocol). Рассмотрим их основные характеристики.

XML (eXtensible Markup Language)

XML - это eXtensible Markup Language, в переводе “расширяемый язык разметки”. XML создан для описания данных и фокусируется на том, что именно эти данные из себя представляют.

Внешне XML-документ напоминает HTML-документ. XML-документ, также как и HTML-документ, является обычным текстовым файлом, в котором содержится набор тегов и данные, заключенные между этими тегами.

При этом, если в HTML набор тегов фиксирован, то в языке XML теги не заданы с самого начала. Разработчик XML-документа должен определить свои собственные теги, необходимые для описания заключенной в документе информации.

Язык XML был создан для структурирования, хранения и передачи информации. Больше XML не выполняет никаких функций, в частности, XML не является, например, языком программирования, и только с его помощью не возможно производить операции над данными, заключенными в XML-документе.

XML можно считать неким промежуточным звеном между форматом представления данных, предназначенным для восприятия человеком (например, текстовым документом), и неким бинарным кодом, используемым для представления встроенных типов данных языков программирования.

Ниже представлен пример записки (note) от Алексея к Наталье, сохраненной в виде XML-документа. У записки есть заголовок (heading) и содержательная часть (body). Кроме того, в ней содержится информация об отправителе (from) и получателе (to). Такой XML-документ просто структурирует определенную информацию (данные упакованы в XML-теги) и больше ничего не делает. Для того, чтобы такую записку отправить, получить или “красиво” отобразить на экране нужно написать специальное программное обеспечение.

<?xml version="1.0"?>
<note>
<to>Алексей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Истекает срок арендной платы!</body>
</note>

Одним из преимуществ языка XML является возможность его использования различными программами независимо от используемого языка программирования и платформы, под управлением которой эти программы функционируют. И еще одним несомненным преимуществом XML является гарантированная доставка XML-документа методами Сети, в частности HTTP.

WSDL (Web Services Description Language))

WSDL расшифровывается как Язык Описания Веб-сервисов (Web Services Description Language).

Документ WSDL является XML-документом, описывающим Веб-сервис, т.е. содержит набор выражений, определяющих Веб-сервис. Он определяет расположение сервиса и операции (или методы), предоставляемые им, а также формат их вызова. На основании WSDL-документа клиентом осуществляется выбор необходимого метода, из предоставленных сервером Веб-служб, и формируются запросы к данному Веб-сервису.

Общая структура WSDL-документа может быть представлена следующим образом:

<definitions>
<types>
Описание типов данных, используемых Веб-сервисом.
</types>
<message>
Описание сообщений, используемых Веб-сервисом.
</message>
<portType>
Описание операций (методов), предоставляемых Веб-сервисом
</portType>
<binding>
Описание протоколов связи, используемых Веб-сервисом
</binding>
</definitions>
WSDL-документ может также содержать и некоторые другие элементы.

Ниже приведен пример WSDL-документа, описывающего Веб-сервис, предоставляющий всего одну операцию Sum (сложение двух целых чисел).

<?xml version="1.0"encoding="UTF-8" ?>
<definitions xmlns:http=
"http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s0="http://tempuri.org"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://tempuri.org" xmlns="http://schemas.xmlsoap.org/wsdl/">
//Описание типов данных аргументов метода и возвращаемого 
//значения
<types>
<s:schema elementFormDefault="qualified"
targetNamespace="http://tempuri.org"> 
// Методу Sum передаются два аргумента val1 и val2 с
//указанными типами данных
<s:element name="Sum">
<s:complexType><s:sequence>
<s:element name="val1" type="s:long"
minOccurs="0" />
<s:element name="val2" type="s:long"
minOccurs="0" />
</s:sequence>
</s:complexType>
</s:element>
// Описание типа данных возвращаемого методом значения
<s:element name="SumResponse">
<s:complexType>
<s:sequence>
<s:element name="SumResult" type="s:long"
minOccurs="0" />
</s:sequence>  </s:complexType> 
</s:element> 
</schema>
</types>
// Описание входящего сообщения метода Sum
// С входящим сообщением ассоциирован тип данных Sum
<message name="SumSoapIn"> 
<part name="parameters" element="s0:Sum" />
</message>
// Описание исходящего сообщения метода Sum
// С исходящим сообщением ассоциирован тип данных SumResponse
<message name="SumSoapOut">
<part name="parameters" element="s0:SumResponse" />  
</message>
// Описание операций (методов), предоставляемых Веб-сервисом
<portType name="ArithmeticSoap">
// Данный Веб-сервис предоставляет операцию Sum
// Операция имеет входящее сообщение SumSoapIn
// И исходящее сообщение SumSoapOut
<operation name="Sum"> 
<input message="s0:SumSoapIn" />
<output message="s0:SumSoapOut" />
</operation> 
</portType>
// Определение формата сообщения и деталей протокола для
//каждого порта
<binding name="ArithmeticSoap" type="s0:ArithmeticSoap"> 
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
<operation name="Sum"> 
<soap:operation soapAction="http://tempuri.org/Web.Arithmetic.Sum"
style="document" />
<input> 
<soap:body use="literal" />  
</input>
<output> 
<soap:body use="literal" />  
</output> 
</operation> 
</binding>
// Определяет имя сервера Веб-служб, позволяет объединить
//внутри себя несколько портов (наборов методов), определяет
//расположение сервиса
<service name="Arithmetic">
<port name="ArithmeticSoap" binding="s0:ArithmeticSoap"> 
<soap:address
location="http://MASHA:1972/csp/www/Web.Arithmetic.cls" />
 </port> 
</service> </definitions>

SOAP (Simple Object Access Protocol)

SOAP - это основанный на XML протокол, который позволяет взаимодействовать различным приложениям на основе стандарта HTTP. объектам” (Simple Object Access Protocol) и предназначен для коммуникациями (передачи информации) между удаленными объектами. Использование HTTP является наиболее удобным способом коммуникации между приложениями, поскольку протокол HTTP поддерживается всеми Веб-браузерами и серверами. SOAP представляет собой способ коммуникации между приложениями на базе протокола HTTP и некоторых других Internet-протоколов, а использование XML в качестве основы SOAP позволяет ему работать под управлением различных операционных систем, на основе различных технологий и языков программирования.

Таким образом, протокол SOAP позволяет обмениваться сообщениями между клиентом и сервером. Сообщение SOAP является обычным XML-документом. Этот документ состоит из следующих XML-элементов:

  • SOAP header ("заголовок", не обязательный элемент), в нем содержится заголовочная информация;
  • SOAP envelope ("конверт"), который определяет содержание послания;
  • SOAP body ("тело"), в нем содержится информация вызовов и ответов на вызовы.

Сообщения между сервером Веб-служб и клиентом пакуются в SOAP-конверты (SOAP envelopes). Сообщения содержат либо запрос на осуществление какого-либо действия, либо ответ - результат выполнения этого действия. Конверт и его содержимое закодировано языком XML. Ниже приведен простой пример SOAP-запроса GetTranslation, который отправляется через HTTP к Веб-сервису. Здесь запрашивается перевод слова помидор с русского языка на английский.

<soap:Envelope>
<soap:Body>
<xmlns:m="http://www.somesite.org/translation" />
 <m:GetTranslation>
    <m:Word>помидор</m:Word>
     <m:Language>RussianTOEnglish</m:Language>
</m:GetTranslation>
</soap:Body>
</soap:Envelope>
Также приведен пример SOAP-ответа на данный запрос.
<soap:Envelope>
<soap:Body>
<xmlns:m="http://www.somesite.org/translation" />
 <m:GetTranslationResponse>
    <m:Translation>tomato</m:Translation>
 </m:GetTranslationResponse>
</soap:Body>
</soap:Envelope>

Элемент <m:GetTranslation> в запросе поменялся на элемент <m:GetTranslationResponse> в ответе на запрос. В этом элементе содержится только один элемент <m:Translation>, значение которого и обозначает запрашиваемый перевод слова помидор с русского языка на английский. Таким образом, с помощью SOAP мы сформировали запрос в виде XML, передали его серверу Веб-служб и получили определенного вида ответ на языке XML. При этом, наша программа должна была только сформировать запрос и передать его серверу, никаких обращений, например, к БД наша программа не производила, а получила сразу готовый, структурированный специальным образом, результат.

Caché и Веб-службы

Теперь перейдем непосредственно к применению технологии Веб-сервисов в Caché. Как упоминалось ранее, Caché может являться клиентом Веб-служб, т.е. обращаться к внешним по отношению к Caché сервисам. Также Caché может являться и сервером Веб-служб, т.е. предоставлять сервисы, которые будут доступны клиентским приложениям по протоколу SOAP. Для передачи сообщений по протоколу SOAP используется CSP-шлюз.

Реализация клиента и сервера Веб-служб в Caché построена с использованием объектной технологии. Каждому клиенту (серверу) Веб-служб в Caché соответствует специальный класс. Этот класс может содержать несколько методов, обозначенных ключевым словом WebMethod. Каждой операции, предоставляемой Веб-сервисом, соответствует свой собственный WebMethod. Таким образом, работа с классами, соответствующими клиенту и серверу Веб-служб в Caché, аналогична работе с остальными классами Caché.

Caché как клиент Веб-служб

Клиент Веб-служб в Caché представляет собой класс, наследуемый от системного класса %SOAP.WebClient и содержащий набор методов, отмеченных ключевым словом WebMethod. Каждый такой метод соответствует определенному методу Веб-сервиса на удаленной машине.

Для создания SOAP-клиента в Caché встроен специальный мастер. Мастер доступен из меню Caché Studio Инструменты->Расширения->1 SOAP Client Wizard. На первом шаге мастера указывается URL-адрес WSDL-документа соответствующего выбранному Веб-сервису. На основании WSDL-документа мастер создает класс с необходимыми Веб-методами, а также автоматически устанавливает значения параметров, определяющих имя удаленного Веб-сервиса, его расположение и пространство имен. Также может быть автоматически сгенерирован дополнительный класс (классы), если, например, при вызове метода Веб-сервиса необходимо передавать параметры определенного формата (например, строку определенного вида или значения из некоторого набора).

Ниже приведен пример класса, созданного мастером на основании WSDL-документа для Веб-сервиса, предоставляющего только одну операцию Sum, которая выполняет сложение двух целых чисел.

Class.ArithmeticSOAP Extends %SOAP.WebClient
{
/// URL-адрес для доступа к Веб-сервису.
Parameter LOCATION = "HTTP://MASHA:1972/csp/www/Web.cls"; 
/// Пространство имен Веб-сервиса
Parameter NAMESPACE = "HTTP://tempuri.org"; 
/// Имя сервиса
Parameter SERVICENAME = ""; 
/// Метод, обращение к которому вызывает выполнение
/// соответствующего метода Веб-сервиса
Method Sum(val1 As %Integer, val2 As %Integer)As %Integer
[ Final, ProcedureBlock = 1, SoapBindingStyle = document,
SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("Sum").
                       Invoke(##this,
"http://tempuri.org/Web.Arithmetic.Sum",.val1,.val2)
}
}

Вы можете создавать экземпляры созданного класса и вызывать методы класса-клиента. Например:

WWW>Set client = ##class(Arithmetic.ArithmeticSoap).%New()
WWW>Write client
1@Arithmetic.ArithmeticSOAP 
WWW>Set result = client.Sum(1,-3)
WWW>Write result
-2 

Caché как сервер Веб-службы

Сервер Веб-служб в Caché представляет собой класс, наследуемый от системного класса %SOAP.WebService и содержащий набор методов, отмеченных ключевым словом WebMethod. Каждый такой метод соответствует определенному методу Веб-сервиса. Целесообразно для каждого набора логически связанных методов создавать отдельный Веб-сервис (соответствующий класс).

Поскольку SOAP-протокол является “stateless”, т.е. не поддерживает состояния и не позволяет вызывать методы объекта, то WebMethod’ами могут быть только методы класса. Тем не менее, внутри WebMethod’а вы можете выполнять различные действия, в том числе создавать объекты, обращаться к БД, в том числе удаленной и т.д.

Для каждого класса, унаследованного от системного класса %SOAP.WebService, Caché автоматически создает WSDL-документ, определяющий список доступных внешним программам методов и формат их вызова.

На Рис.2 иллюстрируется механизм взаимодействия Веб-сервиса Caché и клиента.

Рис.2. Принципы работы Веб-служб в Caché

Клиент запрашивает WSDL-документ с Веб-сервера, который, в свою очередь, запрашивает этот документ у сервера Caché. Используя информацию, предоставленную WSDL-документом, клиент вызывает нужный ему метод. Для вызова метода клиент создает XML-сообщение (SOAP-запрос), в котором указывается вызываемый метод и переданные этому методу параметры. Далее это сообщение отправляется серверу Caché по протоколу HTTP.

Сначала запрос передается на Веб-сервер, затем его перехватывает CSP-шлюз и перенаправляет на сервер Caché, где SOAP-запрос конвертируется в специальный вызов метода Веб-сервиса. Выполняется вызванный метод. В качестве значения, возвращаемого методом, может быть некоторое простое значение (например, число или строка символов) или набор объектов, представленный в виде XML. Для того, чтобы метод Веб-сервиса в качестве возвращаемого значения, возвращал экземпляр какого-либо класса, соответствующий класс должен быть унаследован от класса %XML.Adaptor. Результат работы Веб-метода возвращается в виде XML-документа.

Основные параметры Веб-сервиса Caché:

  • LOCATION – URL, с которого Веб-сервис доступен клиенту. Значение параметра LOCATION включено в WSDL-документ. ("конверт"), который определяет содержание послания;
  • NAMESPACE– определяет пространство имен Веб-сервиса. Используется для избежания конфликта имен с другими Веб-сервисами.
  • SERVICENAME– определяет имя Веб-сервиса и должен являться “правильным” идентификатором Веб-сервиса, т.е. имя Веб-сервиса должно начинаться с буквы и состоять только из символов алфавита и цифр.
Ниже приведен пример класса, унаследованного от %SOAP.WebService, содержащего WebMethod Sum(), которому в качестве аргументов передаются два целых числа. Метод выполняет сложение этих чисел и возвращает полученный результат.
Class Web.Arithmetic Extends %SOAP.WebService[ProcedureBlock]
{
/// SERVICENAME - Should be the name of the service for
            which this is a proxy.
/// Override this parameter in the subclass.
        Parameter SERVICENAME = "Arithmetic";
/// сложение двух чисел
ClassMethod Sum(val1 As %Integer, val2 As %Integer)
As %Integer [ WebMethod ]
{{
            s res="val1" + val2
            q res
}}
}

Для того, чтобы протестировать работу созданного Веб-сервиса, откройте соответствующий класс в браузере (Рис. 3) (например, из меню Caché Studio View->Web Page). Для проверки работы нужного WebMethod’а воспользуйтесь ссылкой, соответствующей имени метода (Рис. 4). Как упоминалось ранее, при компиляции класса, соответствующего Веб-сервису, Caché автоматически создает для него WSDL-документ. Просмотреть содержимое WSDL-документа можно по ссылке Service Description. URL-адрес созданного WSDL-документа будет использоваться внешними приложениями для получения информации о вашем Веб-сервисе.

Рис. 3. Страница проверки Веб-сервиса

Рис. 4. Проверка метода Sum()

В качестве результата выполнения метода Веб-сервис возвращает XML-документ, содержащий значение, возвращаемое вызванным методом, например:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-
    ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:s="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body>     <SumResponse xmlns="http://tempuri.org">      <SumResult>11</SumResult>     </SumResponse>    </SOAP-ENV:Body> </SOAP-ENV:Envelope>

URL-адрес WSDL-документа формируется следующим образом:

<URL-адрес страницы, соответствующей открытому в браузере 
классу (Веб-сервису)>?W=1

Например:

http://127.0.0.1:1972/csp/web/Service.Arithmetic.CLS?WSDL=1 

Для того, чтобы работать с созданным Веб-сервисом Caché из внешнего приложения, необходимо этому приложению указать адрес WSDL-документа вашего Веб-сервиса, что является стандартной процедурой для работы с Веб-сервисом независимо от технологии, используемой для его реализации. Например, вы можете обращаться к созданному Веб-сервису из .Net. Для этого в меню Visual Studio.NET выберите Project->Add Web Reference… В строку Address открывшегося окна скопируйте адрес Вашего WSDL-документа. Перейдите по введенному Вами адресу. В случае успеха в левой части окна у Вас откроется содержимое указанного WSDL-документа. А в правой части в списке доступных ссылок (Available references) отобразится введенная. Добавьте данную ссылку (кнопка Add Reference). После этого в вашем клиентском приложении будет создан класс, соответствующий Веб-сервису Caché. Таким образом в .NET создан SOAP-клиент для работы с сервисом Caché. Вы можете из вашего приложения вызывать методы созданного класса, которые, в свою очередь, будут вызывать методы Веб-сервиса Caché.

Новости мира IT:

Архив новостей

Последние комментарии:

С Новым Годом!! :) (1)
Среда 04.01, 04:47
Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...