Message
Базовой сущностью протокола (устаревший способ взаимодействия, см. HTTP) является Message.
Структура Message представляет собой JSON следующего формата:
{
"type": String,
"address": String,
"data": Any?,
"headers": Map<String, String | Number | Boolean | null>
}
Поле type клиентского сообщения не обрабатывается сервером, рекомендуется передавать send.
Поле address требуется для идентификации сервиса, который будет обслуживать данное сообщение.
Поле data содержит тело запроса. Тело запроса меняется в зависимости от
обслуживающего сервиса, а также исполняемой функции. Если поле не передано - используется null.
Поле headers содержит в себе дополнительную информацию, которая требуется
для выполнения операции и обязано содержать поле action, в котором содержится
название выполняемого метода в рамках сервиса. Числовые и логические значения заголовков
преобразуются в строку, заголовки со значением null игнорируются.
Заголовок action может иметь значение с использованием любой
политики наименования, например:
- getTokenBySerial
- get_token_by_serial
- GET_TOKEN_BY_SERIAL
- GetTokenBySerial
являются полностью поддерживаемыми и валидными значения вызова
одного и того же метода (значение преобразуется в snake_case).
Ответ сервера имеет формат:
{
"type": "send" | "error",
"data": Any?
}
send- операция выполнена успешно, вdataнаходится результатerror- вdataнаходится ошибка
HTTP статус ответа всегда 200, за исключением вызова несуществующего метода - в этом случае
возвращается статус 404 и ошибка http.status.404.
Важно: для уменьшения передаваемых данных следует передавать minified
JSON (без переносов строк, пробелов между полями и т.п.), например:
{"type":"send","address":"ik.service.token","headers":{"action":"getTokenBySerial","token":"AVQ11031010703","tokens.refresh":"true"}}
Примеры
Валидный клиентский Message:
{
"type": "send",
"address": "ik.service.token",
"headers": {
"action": "getTokenBySerial",
"token": "AVQ11031010703",
"tokens.refresh": "true"
}
}
Валидный успешный ответ сервера:
{
"type": "send",
"data": {
"device_id": 131010703,
"operator_code": 5,
"organization": "ИП Моров А.М.",
"pin_code_length": 5,
"puk_code_length": 8,
"serial": "AVQ11031010703",
"tax_number": 191832203
}
}
Валидный неуспешный ответ сервера:
{
"type": "error",
"data": {
"name": "http.status.404",
"description": "Ошибка запроса",
"op_data": null
}
}