Основная статья про DaJet Stream
Видео: знакомство с платформой DaJet
Дистрибутив DaJet 3.3.3 на GitHub
Команда REQUEST в языке запросов DaJet Stream предназначена для выполнения http/s запросов, интеграции различных web api и того подобного. Она может быть добавлена в скрипт обмена данными совместно с другими командами DaJet Stream в нужной для решения задачи комбинации.
Вариантов использования http запросов огромное количество. Поэтому для ознакомления с функционалом команды REQUEST ниже будет приведён только один из возможных сценариев её использования.
Внимание! Команда REQUEST выполняется синхронно.
DECLARE @response object -- Переменная для ответа на HTTP запрос
REQUEST 'http://localhost/1c/hs/test/query'
WITH User-Agent = 'DaJet Stream'
, Content-Type = 'text/plain; charset=utf-8'
SELECT Method = 'POST' -- HTTP метод запроса
, OnError = 'break' -- break или continue
, Content = 'Привет!' -- Тело HTTP запроса
INTO @response -- { "Code": "200", "Value": "text" }
Описание синтаксиса команды REQUEST
REQUEST - URL запроса, может быть динамическим шаблоном (см. пример ниже)
WITH - стандартные или пользовательские заголовки HTTP запроса
SELECT - опции процессора DaJet Stream для выполнения HTTP запроса
- Method - стандартный метод HTTP запроса (GET, POST и т.д.)
- OnError - стратегия обработки ошибок (необязательна, значение по умолчанию: break)
- break - вызвать исключение и прервать выполнение конвейера обмена данными
- continue - сохранить данные об ошибке и передать управление следующей команде
- Content - тело HTTP запроса (текстовый формат, кодировка UTF-8)
INTO - переменная объектного типа (object), в которую возвращается результат выполнения запроса
Доступные свойства HTTP ответа
(переменная response из скрипта выше)Свойство | Тип данных | Описание |
---|---|---|
Code | string | Стандартный код HTTP ответа |
Value | string | Тело HTTP ответа |
В следующем сценарии используется регистр сведений "ИсходящиеЗапросы", который используется для асинхронной отправки HTTP запросов и логирования полученных ответов. Реквизит "Попытка" используется для контроля количества неуспешных выполнений, чтобы такие запросы не выполнять бесконечно.
Регистр сведений "ИсходящиеЗапросы"
Свойство | Наименование | Тип данных | Описание |
---|---|---|---|
Измерение | Статус |
Перечисление "СтатусыЗапросов" |
Статус выполнения HTTP запроса |
Измерение | Идентификатор |
Уникальный идентификатор |
Идентификатор запроса |
Ресурс | Адрес | Строка(1024) | URL HTTP сервиса |
Ресурс | Метод | Строка(10) | Метод HTTP запроса |
Ресурс | Тело | Строка(0) | Тело HTTP запроса для отправки |
Реквизит | Результат | Строка(3) | Стандартный HTTP код ответа |
Реквизит | Ответ | Строка(0) | Тело ответа HTTP сервиса |
Реквизит | Попытка | Число(2,0) | Количество выполнений запроса |
Состояние регистра до выполнения скрипта DaJet Stream
Скрипт DaJet Stream
DECLARE @sender string = 'DaJet Stream'
DECLARE @source string = 'mssql://zhichkin/dajet-exchange'
DECLARE @request object -- параметры http-запроса
DECLARE @response object -- код и тело http-ответа
-- ***************************************************************
-- * Источник HTTP запросов, регистр сведений "ИсходящиеЗапросы" *
-- ***************************************************************
USE '{@source}'
STREAM Идентификатор, Адрес, Метод, Тело, Попытка
INTO @request
FROM РегистрСведений.ИсходящиеЗапросы
WHERE Статус = Перечисление.СтатусыЗапросов.Новый
OR Статус = Перечисление.СтатусыЗапросов.Ошибка
AND Попытка < 5
-- ***************************************************************
-- * СИНХРОННЫЙ вызов HTTP сервисов согласно заданным параметрам *
-- ***************************************************************
REQUEST '{@request.Адрес}'
WITH User-Agent = @sender
, Content-Type = 'application/json; charset=utf-8'
SELECT OnError = 'continue' -- continue или break
, Method = @request.Метод -- HTTP метод запроса
, Content = @request.Тело -- Тело HTTP запроса
INTO @response -- { "Code": "200", "Value": "text" }
-- ************************************************************************
-- * Журналирование результатов выполнения HTTP запросов в базе-источнике *
-- ************************************************************************
UPDATE РегистрСведений.ИсходящиеЗапросы
WHERE Идентификатор = @request.Идентификатор -- Идентификатор HTTP запроса
SET Результат = @response.Code -- HTTP код ответа (строка)
, Ответ = @response.Value -- Тело HTTP ответа (строка)
, Попытка = @request.Попытка + 1.0 -- Счётчик попыток
, Статус = CASE WHEN @response.Code = '200' -- Код HTTP ответа
THEN Перечисление.СтатусыЗапросов.Успех
ELSE Перечисление.СтатусыЗапросов.Ошибка END
Выполнение скрипта в среде Windows (из корневого каталога установки) dajet stream --file ./stream/script.sql |
Выполнение скрипта в среде Linux (из корневого каталога установки) dotnet ./dajet.dll stream --file ./stream/script.sql |
Состояние регистра после выполнения скрипта 5 и более раз