Для интеграции с внешними приложениями система Ultima Businessware® предлагает использование web сервисов по протоколам SOAP или с использованием REST API. Приложение рассчитано на обработку высокой нагрузки и поэтому средства разработки специально оптимизированы для создания web сервисов с message-based дизайном. Для удобства внешних разработчиков поддерживается сериализация в XML и JSON. Инструменты создания web сервисов позволяют в графическом интерфейсе описать DTO (Data Transfer Object) для запроса и возвращаемого значения. Таким образом, каждый web сервис состоит из:
•класса запроса;
•класса ответа;
•скрипта, который принимает запрос и генерирует ответ.
Задачи маршрутизации, сериализации и десериализации система скрывает от прикладного разработчика.
Список всех web сервисов можно найти в справочнике "Web services":
Окно справочника разделено на две части: слева отображается дерево групп web сервисов, справа – список сервисов выбранной слева группы.
Записи справочника можно фильтровать по Названию класса web сервиса (Name), его тексту (Script text) и Тегам (Tag).
Открыть скрипт выбранного сервиса в форме редактирования можно прямо из списковой формы справочника, выбрав пункт Edit script в контекстном меню.
Web сервис обладает следующими свойствами:
•Name – название класса web сервиса;
•Script – ссылка на скрипт web сервиса. При создании нового сервиса скрипт создается автоматически при его сохранении;
•Folder – группа, которой принадлежит web сервис. Нажатие на ссылку Click here to edit the script... при создании нового web сервиса приведет к сохранению сервиса и его перезагрузке, затем откроется форма редактирования скрипта;
•Metadata tags – теги, используемые для описания функционала web сервиса;
•Developer's comments – комментарии прикладного разработчика;
•Request parameters – параметры (DTO) запроса reguest:
▪Name – название параметра;
▪Type – тип параметра, в качестве значения могут быть использованы типы POCO (Plain Old CLR Object) – примитивные типы CLR, даты, строки. Тип может быть выбран из существующих или веден вручную; ▪Is array – параметр может быть массивом указанного типа, если установлен данный флаг; |
▪Developer's comments – комментарии прикладного разработчика;
•Response parameters – параметры (DTO) ответа response. Их свойства аналогичны параметрам запроса.
И параметры запроса и параметры ответа могут иметь сложную вложенную структуру. Если у параметра есть дочерние параметры – для него будет сгенерирован отдельный вложенный класс. Для создания дочернего параметра необходимо выбрать родительский параметр и нажать кнопку в панели инструментов параметров.
При удалении родительского параметра, все его дочерние параметры станут параметрами первого уровня (с сохранением их вложенной структуры), даже если родительский параметр сам был дочерним для другого.
Параметры в списках можно перетаскивать за заголовок строки, удерживая нажатой левую кнопку мыши. Таким образом, выбранный параметр можно сделать дочерним для любого другого. Стрелка указывает, какой параметр будет выбран в качестве родительского:
Если перетащить параметр второго уровня на его же родительский параметр первого уровня, он сам переместится на первый уровень:
•Web service returns list of response class instances – флаг, указывающий, что веб-сервис возвращает список значений.
Закладка Permissions позволяет быстро настроить список веб-ролей, которым предоставлен доступ к этому веб-сервису. Список ролей позволяет легко проконтролировать, доступен ли веб-сервис как минимум одной веб-роли:
По нажатию кнопки " Class code" в панели инструментов формы редактирования открывается сгенерированный класс, описывающий web-сервис:
Пример веб-сервиса MyOrders, возвращающего список документов в заданном интервале дат:
class MyOrders : IReturn<List<MyOrdersResponse>> { DateTime DateFrom DateTime DateTo }
class MyOrdersResponse { int ID string Comments DateTime Date Article[] Articles
class Article { int ID string Name decimal Price } } |
Интерфейс IWebService (из пространства имен Ultima.WebServices) реализует следующие методы:
•Get(TRequest request) – выполняет указанный GET-запрос request;
•Put(TRequest request) – выполняет указанный PUT-запрос request;
•Post(TRequest request) – выполняет указанный POST-запрос request;
•Delete(TRequest request) – выполняет указанный DELETE-запрос request;
•Options(TRequest request) – выполняет указанный OPTIONS-запрос request;
•Any(TRequest request) – используется для выполнения запроса request, метод которого отличен от перечисленных выше.
Помимо общедоступного web сервиса, развернутого администратором по конкретному адресу, он может быть запущен локально. Для этого необходимо указать в качестве его адреса Localhost в конфигурации сервера приложений:
Web разработчик может получить список доступных web сервисов по его адресу:
Также поддерживается Swagger (спецификация, описание и документация REST сервиса):
Выбрав сервис и тип операции Get/Post (и, при необходимости, задав значения параметров), можно проверить работу сервиса нажатием кнопки "Try it on!":
Запросы к web сервису всегда выполняются от имени пользователя WebService и с его правами в защищенном режиме. |
После любых изменений, внесенных в web-сервисы, необходимо перезагрузить их командой Reload web services, чтобы эти изменения вступили в силу. |