Всем привет!
В данной статье я поделюсь, как создаются web-сервисы на базе архитектуры SAS, и как используются хранимые процессы SAS для работы с web-сервисами.
Как оказалось, ничего сложного в этом нет!
Итак, приступим.
Что нам необходимо для создания и развертывания
- Работоспособный сервер SAS
- Установленный клиент SAS Management Console (MC) с доступом к серверу SAS
- SOAP UI или любой другой инструмент для работы с web-сервисами
- Клиент для написания и запуска SAS кода: SAS Base, SAS Enterprise Guide, SAS Studio и тд
Запустим SAS MC и перейдём во вкладку Folders, где создадим папку Web Services:
В рамках этой папки создадим хранимый процесс SAS (Stored Process):
Далее ->
Данное окно является ключевым. В нём необходимо указать сервер на котором будет отрабатываться код, указывается исполняемый код и тип результата. Для web-сервиса требуется указать Stream.
Ниже исполняемый код:
libname _WEBOUT xml xmlmeta=&_XMLSCHEMA;
libname instream xml;
%let event_id = 1;
data _WEBOUT.RESPONSE;
event_id = &event_id;
run;
libname _WEBOUT clear;
libname instream clear;
Во вкладке параметров я оставил всё по умолчанию. К сожалению, я пока не разобрался, как можно использовать макропеременные из этой вкладки в передаче параметров. Это моя зона роста =)
Далее ->
В следующей вкладке требуется создать источник с которым будет работать web-сервис. Создаём New Data Source:
Процесс создан.
Далее его необходимо развернуть на сервере как web-сервис, делается это элементарно. Правой кнопкой по процессу и Deploy as Web Service.
Создаём web-сервис, где указываем URL и название:
Далее ->
Оставляем всё как есть. Далее ->
Далее -> Появляется ссылка на web-сервис:
Копируем эту строку.
Убеждаемся, что web-сервис развернут в системе через SAS Management Console -> Application Management -> SAS Application Infrastructure -> Bi WEB Servcices for Java -> WebServiceMaker
Следующим этапом будем проверять доступность web-сервиса через внешние системы. Технически сегодня существует достаточно большое количество инструментов для работы с Web сервисами. Более того, это также возможно сделать с помощью SAS кода.
На данный момент самым удобным инструментом для меня является SOAP UI.
Делаем запрос к web-сервису, ссылку на который скопировали на предыдущем шаге. В моём случаем это http://sas-dm-server/SASBIWS/services/EXAMPLE
Для того, чтобы создать запрос необходимо указать WSDL. Для нашего сервиса это делается добавлением в конце запроса ?WSDL (http://sas-dm-server/SASBIWS/services/EXAMPLE?WSDL). Создаём запрос в SOAP UI и отправляем его без дополнительных параметров:
Если во время исполнения код возникла ошибка: A ‘Client Authentication’ type of exception occurred during execution of service. The exception follows: No security context is available – то обратитесь к http://support.sas.com/documentation/cdl/en/bimtag/68217/HTML/default/viewer.htm#p04qp3mo44ikffn1pk68tbpubi1y.htm
Теперь попробуем передать новую информацию в web-сервис. Сделать это можно изменив структуру запроса, добавив в запрос следующие строки:
<table>
<request>
<event_id>99</event_id>
</request>
</table>
Данные строки передают табличку Request c полем event_id и значением 99. Эквивалентно коду:
data request;
event_id = 99;
run;
Для того чтобы эта информация могла быть использована, нам потребуется дополнительная обработка. Я возьму кусок кода из другой статьи – обработка макро переменных. Значения входящей таблицы автоматически преобразуются в макропеременные:
Далее новым запросом в SOAUP UI получаем следующий результат:
Далее уже начинается полёт фантазии по работе с web-сервисами. Удачи в этом нелегком деле =)
Для более подробного изучения web-сервисов, я рекомендую обратиться к следующему ресурсу:
http://support.sas.com/documentation/cdl/en/wbsvcdg/64883/HTML/default/viewer.htm#titlepage.htm
Добрый день!
Параметры в настройках ХП используются как входные параметры для Веб-сервиса и макропеременные в коде ХП.
Т.е. при вызове веб-сервиса (как в браузере так и в Soap UI) будет необходимо ввести значение для заданного в свойствах ХП параметра и данное значение присвоится макропеременной, которую можно использовать в коде ХП (имя макропеременной совпадает с названием параметра).
Так же параметры можно использовать для отладки ХП и Веб-сервиса. Параметр в таком случае необходимо назвать _debug и присвоить ему значение log. Тогда после выполнения каждого ХП в браузере ниже выводимой им информации будет помещен лог выполнения SAS-кода данного ХП. У переменной _debug есть и другие полезные «функции» — http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/dbgsrvlt.html
Георгий, привет!
Спасибо за столь полезный комментарий!
У такого способа есть как плюсы, так и минусы. Например, негибкость с добавлением новых параметров.
Чтобы не использовать в принципе XML, для такого подхода желательно указать и выходные параметры в настройках веб-сервиса.
Я планировал написать статью и для такого способа в ближайшее время =)