Как отправить запрос к Тотум по пути?
Например у вас есть сторонний сервер, которому нужно передать параметры и получить ответ от Тотума.
Лучшим решением для этого являются remotes — втроенные api-микросервисы на Totum.
Самый простой вариант — создаем строку в таблице Системные таблицы
—> Основные
—> API
—> Remotes
.
Задаем name
+ remotes_user
+ code
:
=: selectRowList(table: 'users'; field: 'login'; field: 'fio')
В return
ставим вариант json
и включаем on_off
.
Теперь если мы в браузере откроем https://HOST.TOTUM/Remotes/NAME_ACTION
— то увидим список всех пользователей системы в json
-формате.
Можно ли написать обработчик и сборщик информации на тотум-коде?
Да, код в code
в remotes
пишется именно на totum-code
.
Каким образом можно передать данные в таком запросе и как их получить в тотум-коде?
В запросе к Тотуму могут быть переданы GET
или POST
параметры.
Внутри кода в code
параметры запроса могут быть получены через переменные:
$#get
— row
из переменных, переданных в GET.
$#post
— row
из переменных, переданных в POST при использовании application/x-www-form-urlencoded
или multipart/form-data
в заголовке Content-Type
запроса HTTP
.
$#input
— строка или null
— необработанные данные из тела запроса при передаче POST
в raw-data
.
$#headers
— row из заголовков HTTP-запроса.
Обратите внимание, что если параметры передаются размеченными в GET или POST (не в raw-data
), то они придут в код Тотума уже в формате Тотума.
Те если у вас запрос к ремоуту содержит POST
с параметрами key = zzGhdy
и name = Alexey
, то что бы найти такую запись в таблице table
по key
:
=: select(table: 'table'; field: 'summ'; where: 'key' = $#post[key])
Если же запрос пришел в raw-data
и вы получили его при помощи $#input
то это будет просто строка, которую вам нужно будет разобрать на части.
Какие есть варианты кодирования ответа?
success/error
— возвращается success
либо error
если в процессе выполнения были ошибки. Текст ошибки не выводится.
json
— ответ скрипта переводится в JSON. Если возникла ошибка, возвращается {"error":"Текст ошибки"}
.
строка
— ответ скрипта возвращается в тело ответа без обработки.
headers + body
— в ответе скрипта ожидается row
с ключами headers
— отправляются в качестве HTTP-заголовков ответа и body
— выводится в тело ответа.
Можно ли протестировать remote не отправляя запрос?
Да, в таблице remotes
есть 4 поля: get
, post
, input
, data
и кнопка check_remote
.
get
, post
, input
и data
— соответсвуют переменным. Про data
расскажем чуть позже.
При исполнении кода по кнопке check_remote
он выполнится от того пользователя под которм нажимаетсякнопка, а не под пользователем remotes_user
.
Можно ли выполнить действие в тотум при получении такого запроса?
Конечно. Code
— это код-действия. Например если мы хотим создать строку и записать в поле data
пришедший POST
:
=: insert(table: 'table'; field: 'data' = $#post)
От какого пользователя в этом случае будет сделана запись об изменении при включенных логах?
От пользователя указанного в remotes_user
.