Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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
  }
}