Веб сервисы и SAS

Всем привет!

В данной статье я поделюсь, как создаются web-сервисы на базе архитектуры SAS, и как используются хранимые процессы SAS для работы с web-сервисами.

Как оказалось, ничего сложного в этом нет!

Итак, приступим.

Что нам необходимо для создания и развертывания

  1. Работоспособный сервер SAS
  2. Установленный клиент SAS Management Console (MC) с доступом к серверу SAS
  3. SOAP UI или любой другой инструмент для работы с web-сервисами
  4. Клиент для написания и запуска SAS кода: SAS Base, SAS Enterprise Guide, SAS Studio и тд

Запустим SAS MC и перейдём во вкладку Folders, где создадим папку Web Services:

01

В рамках этой папки создадим хранимый процесс SAS (Stored Process):

02

Далее ->

03

Данное окно является ключевым. В нём необходимо указать сервер на котором будет отрабатываться код, указывается исполняемый код и тип результата. Для 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;

05

Во вкладке параметров я оставил всё по умолчанию. К сожалению, я пока не разобрался, как можно использовать макропеременные из этой вкладки в передаче параметров. Это моя зона роста =)

Далее ->

В следующей вкладке требуется создать источник с которым будет работать web-сервис. Создаём New Data Source:

06

07

Процесс создан.

08

Далее его необходимо развернуть на сервере как web-сервис, делается это элементарно. Правой кнопкой по процессу и Deploy as Web Service.

Создаём web-сервис, где указываем URL и название:

09

Далее ->

10

Оставляем всё как есть. Далее ->

11  Далее -> Появляется ссылка на web-сервис:

12

Копируем эту строку.

Убеждаемся, что web-сервис развернут в системе через SAS Management Console -> Application Management -> SAS Application Infrastructure -> Bi WEB Servcices for Java -> WebServiceMaker

13

Следующим этапом будем проверять доступность 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 и отправляем его без дополнительных параметров: 14

Если во время исполнения код возникла ошибка: 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;

Для того чтобы эта информация могла быть использована, нам потребуется дополнительная обработка. Я возьму кусок кода из другой статьи – обработка макро переменных. Значения входящей таблицы автоматически преобразуются в макропеременные:

15

Далее новым запросом в SOAUP UI получаем следующий результат:

16

Далее уже начинается полёт фантазии по работе с web-сервисами. Удачи в этом нелегком деле =)

Для более подробного изучения web-сервисов, я рекомендую обратиться к следующему ресурсу:

http://support.sas.com/documentation/cdl/en/wbsvcdg/64883/HTML/default/viewer.htm#titlepage.htm

 

Веб сервисы и SAS: 2 комментария

  1. Добрый день!

    Параметры в настройках ХП используются как входные параметры для Веб-сервиса и макропеременные в коде ХП.
    Т.е. при вызове веб-сервиса (как в браузере так и в Soap UI) будет необходимо ввести значение для заданного в свойствах ХП параметра и данное значение присвоится макропеременной, которую можно использовать в коде ХП (имя макропеременной совпадает с названием параметра).

    Так же параметры можно использовать для отладки ХП и Веб-сервиса. Параметр в таком случае необходимо назвать _debug и присвоить ему значение log. Тогда после выполнения каждого ХП в браузере ниже выводимой им информации будет помещен лог выполнения SAS-кода данного ХП. У переменной _debug есть и другие полезные «функции» — http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/dbgsrvlt.html

    1. Георгий, привет!

      Спасибо за столь полезный комментарий!

      У такого способа есть как плюсы, так и минусы. Например, негибкость с добавлением новых параметров.
      Чтобы не использовать в принципе XML, для такого подхода желательно указать и выходные параметры в настройках веб-сервиса.

      Я планировал написать статью и для такого способа в ближайшее время =)

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.