SQL запросы (версия 3.xx)/HTTP

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску

Источник данных HTTP предназначен для работы с данными при помощи стандартных http-запросов.

Поддерживаются SQL - операторы:

  • select - выборка данных. В списке полей можно указать только * - все поля или имена полей, функции и различные преобразования не поддерживаются.
    • where - позволяет указать условие выборки. Условие будет наложено на полученные данные.

Получение данных

Для получения данных методом GET можно использовать SQL-запрос:

select * from http_get ('https://www.calloffice.ru/Service/Test/http.php')

В этом случае, будет выполнен GET-запрос к указанному ресурсу и если в ответе будут данные json (Content-Type: application/json) или xml (Content-Type: text/xml или application/xml), результат будет преобразован в таблицу. Данные в формате json должны быть в виде:

[{"имя1":"Значение1","имя2":"Значение2"},
 {"имя1":"Значение3","имя2":"Значение4"}, ...]

Если данные ответа не содержат данных json или xml запрос вернет одну строку с тремя полями:

  • Status - код статуса ответа;
  • Content_Type - тип содержимого (Content-Type);
  • Content - текст ответа;
  • Headers - заголовки ответа.

Допустимые функции

В выражении from можно использовать функции:

  • http (Method, URL, Data, Headers) - http запрос на ресурс URL с методом Method, данными Data и заголовками Headers;
  • http_get (URL, Data, Headers) - GET- запрос на ресурс URL с данными Data и заголовками Headers;
  • http_post (URL, Data, Headers) - POST запрос на ресурс URL с данными Data и заголовками Headers;
  • http_put (URL, Data, Headers) - PUT запрос на ресурс URL с данными Data и заголовками Headers;
  • http_patch (URL, Data, Headers) - PATCH запрос на ресурс URL с данными Data и заголовками Headers;
  • http_delete (URL, Data, Headers) - DELETE запрос на ресурс URL с данными Data и заголовками Headers;

Параметры запроса Data передаются строкой в формате json, например:

{"Param1": "Значение1", "Param2": "Значение2"}

В этом случае запрос будет выглядеть так:

select ip, connectionid, port
  from http_get ('https://www.calloffice.ru/Service/Test/http.php', '{"Param1": "Значение1", "Param2": "Значение2"}')

Заголовки запроса Headers передаются строкой в формате json, например:

{"Content-Type": "text/html; charset=windows-1251"}

В этом случае запрос будет выглядеть так:

select ip, connectionid, port
  from http_get ('https://www.calloffice.ru/Service/Test/http.php', , {"Content-Type": "text/html; charset=windows-1251"})

Условия отбора where

Условие отбора записей накладывается на полученные данные и может быть двух вариантах:

  • В виде обычных выражений SQL, поддерживаются только простые условия без скобок.
  • В виде функции JavaScript, например:
select ip, connectionid, port
  from http_get ('https://www.calloffice.ru/Service/Test/http.php')
 where function () {
          return (port == 55893 && isssl);
       }

Если не указан список аргументов, он будет сформирован автоматически на основе списка полей, полученных в результате запроса. Список полей можно так же указать в явном виде:

select ip, connectionid, port
  from http_get ('https://www.calloffice.ru/Service/Test/http.php')
 where function (port, isssl) {
          return (port == 55893 && isssl);
       }

Пользовательский код работы с данными

Для получения данных можно использовать код на языке JavaScript. Он должен располагаться в тегах /! !/, например:

 /!
 function () {
    var Result = this.Request ('GET', 'https://www.calloffice.ru/Service/Test/http.php'); // Выполняем GET-запрос 
    return this.MakeRecordset (Result);                                                  // Преобразуем результат запроса в набор данных
 }
 !/

С условием where:

 /!
 function () {

   var Result = this.Request ('GET', 'https://www.calloffice.ru/Service/Test/http.php');  // Выполняем GET-запрос 

   var Recordset =  this.MakeRecordset (Result);                                         // Преобразуем результат запроса в набор данных  

   Recordset = Recordset.Where (function (port, ip, isssl) {                             // Накладываем фильтр на полученные данные
                                   return (port != 55893 && isssl);
                                });
   return Recordset;
 }
 !/

Со списком полей:

 /!
 function () {

   var Result = this.Request ('GET', 'https://www.calloffice.ru/Service/Test/http.php');  // Выполняем GET-запрос 

   var Recordset =  this.MakeRecordset (Result);                                         // Преобразуем результат запроса в набор данных  

   Recordset = Recordset.Where (function (port, ip, isssl) {                             // Накладываем фильтр на полученные данные
                                   return (port != 55893 && isssl);
                                });

   Recordset = Recordset.Fields ('port, isssl');                                         // Оставляем в данных только указанные поля

   return Recordset;
 }
 !/

Функции работы с данными в пользовательском коде

  • this.Request (Method, URL, Data, Headers) - запрос к указанному ресурсу URL методом Method, данными Data и заголовками Headers. Возвращает стандартный объект XmlHttpRequest.
  • this.MakeRecordset (Result) - преобразует Result (объект XmlHttpRequest) в набор строк CRecordsetArray.
  • Для набора строк (объект CRecordsetArray) можно использовать функции:
    • Recordset.Where (Where) - отфильтровать строки по условию Where. Условие Where может быть в трех вариантах:
      • - простое выражение в виде текста, например Recordset.Where ('port = 15');
      • - текст функции на языке Javascript, например: Recordset.Where ('function (port) {return port == 15;}');
      • - функция на языке Javascript, например: Recordset.Where (function (port) {return port == 15;});
    • Recordset.Fields (Fields) - отфильтровать поля по заданному списку. Список полей может быть указан в виде:
      • - строки с списком полей разделенных запятыми, например: Recordset.Fields ('port, isssl');
      • - массива Javascript, например: Recordset.Fields (['port', 'isssl']);

Назад к SQL-запросам.