Скриптова подія MyChat Server: 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":
Результат роботи скрипту
[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