MSL: событие OnRequestByREST

MSL: событие OnRequestByREST

Событие, которое возникает, если к WEB-серверу MyChat приходит POST или GET запрос по http/https (REST).

 

Адрес, на который следует отправлять запрос:

[protocol]://[server_address]:[port]/rest/[scriptname]/?[parameters]

 

Описание параметров запроса

Параметр

Значение

protocol

http или https;

server_address

IP адрес или доменное имя сервера MyChat;

port

порт, по которому работает WEB-сервер MyChat. Если это 80/http или 443/https — можно не указывать;

scriptname

название скрипта в разделе событий OnRequestByREST, который будет выполняться на этот запрос. Регистр названия имеет значение, "myScript" и "myscript" — это разные скрипты. Скрипт должен быть включен!

parameters

параметры запроса. Например, data=test&key=value#testhash

 

Шаблон события

function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
begin
  // your own code

  result := '{}';
end;

begin

end.

Вместо комментария может быть любой ваш код.

 

Описание параметров скриптового события

Параметр

Тип

Значение

sBody

string

текст запроса;

sParams

string

параметры запроса;

sHeaders

string

html-заголовки запроса;

sURL

string

полный URL запроса;

sIPv4

string

IP адрес клиента в формате IPv4;

sIPv6

string

IP адрес клиента в формате IPv6;

iType

integer

тип запроса. 0 — GET, 1 — POST.

 

Возвращаемое значение

Функция обязательно должна возвращать JSON объект в виде текстовой строки. Если вы не вернёте ничего либо вернёте неправильный объект, система автоматически вернёт JSON объект с числовым параметром "Error".

 

Список возможных ошибок, которые может вернуть обработчик события.

 

Этот ответ отдаётся сервису, который сделал POST или GET запрос к WEB серверу MyChat.
 

Пример

const
  LOG_FILE = 'c:\temp\log.txt';
  
function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
begin
    case iType of
      0: Protocol('GET request', LOG_FILE, true);
      1: Protocol('POST request', LOG_FILE, true);
    end;

  Protocol('sIPv4    : ' + sIPv4, LOG_FILE, true);
  Protocol('sIPv6    : ' + sIPv6, LOG_FILE, true);
  Protocol('sBody    : ' + sBody, LOG_FILE, true);
  Protocol('sParams  : ' + sParams, LOG_FILE, true);
  Protocol('sURL     : ' + sURL, LOG_FILE, true);
  Protocol('sHeaders : ' + sHeaders, LOG_FILE, true);

  result := '{"done" : "ok"}';
end;

begin

end.

Скрипт обрабатывает входящий REST запрос из браузера клиента и сохраняет данные в файл. В ответ отдаёт шаблонный текстовый ответ в формате JSON.

 

Пример строки запроса в браузере: http://192.168.10.109:8080/rest/telegram/?data=test&key=value#testhash

 

В нашем примере WEB-сервер MyChat работает на IP 192.168.10.109, порт 8080, без шифрования трафика (http). Скрипт для запроса называется "telegram":
 

Пример MyChat скрипта для события OnRequestByREST

 

Результат работы скрипта

[31.05.2017 18:12:26] GET request

[31.05.2017 18:12:26] sIPv4    : 192.168.10.105

[31.05.2017 18:12:26] sIPv6    : ::ffff:192.168.10.105

[31.05.2017 18:12:26] sBody    : ?data=test&key=value

[31.05.2017 18:12:26] sParams  : ?data=test&key=value

[31.05.2017 18:12:26] sURL     : /rest/telegram/123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/

[31.05.2017 18:12:26] sHeaders : Host

192.168.10.109:8080

Connection

keep-alive

Cache-Control

max-age=0

Upgrade-Insecure-Requests

1

User-Agent

Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

Accept

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

DNT

1

Accept-Encoding

gzip, deflate, sdch

Accept-Language

ru,en-US;q=0.8,en;q=0.6,uk;q=0.4

Cookie

io=X7qdbz1grVCXbK2TAAAA
 

Ещё посмотреть

Работа с JSON в скриптах

Protocol