Все запросы должны выполняться только после авторизации пользователя и отправляться методом POST.
Пример формирования запроса для получение данных (Query)
POST http://localhost/rpc HTTP/1.1
RPC-Authorization: Token YWRtaW4N
Content-Type: application/json
{
"action":"Domain.SD_MainDivisions",
"method":"Query",
"data":[
{
"query":"",
"page":1,
"start":0,
"limit":25,
"sort":[
{
"property":"C_Name",
"direction":"ASC"
}
]
}
],
"type":"rpc",
"tid":9,
"rpcTime": 90,
"time": 2
}
, где:
- action: string – наименование сущности;
- method: string – наименование метода в сущности;
- data: any[] – параметры передаваемые методу;
- type: string – тип запроса. По умолчанию rpc;
- tid: any – идентификатор запроса. Генерируется клиентом;
- rpcTime: number — продолжительность запроса в миллисекундах;
- time: number — продолжительность sql — запроса.
rpcTime и authorizeTime — предназначены для анализа запроса.
Примечание: для выборки доступен метод Select, он отличие его от Query в том, что при выполнение не будет дополнительного запроса на подсчет количества строк, а автоматически вернется count=1. Данный метод в основном применяется для выполнения «процедур» на сервере.
Результатом будет ответ:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"result": {
"records": [],
"total": 0
},
"meta": {
"success": true
},
"action": "Domain.SD_MainDivisions",
"method": "Query",
"type": "rpc",
"tid": 5
}
]
Ответ от сервера всегда будет массив, в котором может быть один или несколько объектов (см. Мульти запрос).
- meta: any — результат запроса;
- success: boolean — результат выполнения. Может быть true или false;
- msg: string — текст ошибки;
- fullMsg: string — полный текст ошибки, предназначен для программиста;
- result.records: any[] — результат выполнения;
- result.total: number — количество записей в результате.
Сервис имеет поддержку «мульти запросов»
[
{
"action":"Domain.CS_Users",
"method":"Query",
"data":[
{
"limit":10000,
"page":1,
"start":0
}
],
"type":"rpc",
"tid":3
},
{
"action":"Domain.CS_Users",
"method":"Query",
"data":[
{
"limit":10000,
"page":1,
"start":0
}
],
"type":"rpc",
"tid":4
}
]
Примечание: при этом требуется передавать tid уникальным для каждого блока.
агрегирование в запросах
Для некоторых простых запросов можно применять агрегацию:
[
{
"action": "pd_users",
"method": "Query",
"data": [
{
"select": "max(n_version) as n_max_version, avg(n_version) as n_min_version",
"filter": [
{
"property": "c_login",
"operator": "like",
"value": "-01"
}
]
}
],
"type": "rpc",
"tid": 0
}
]
Получение максимального значения версии из набора.
[
{
"action": "pd_users",
"method": "Query",
"data": [
{
"select": "count(id) as n_count",
"filter": [
{
"property": "c_login",
"operator": "like",
"value": "-01"
}
]
}
],
"type": "rpc",
"tid": 0
}
]
Подсчет количества записей с условием
[
{
"action": "pd_users",
"method": "Query",
"data": [
{
"select": "DISTINCT c_login, c_email"
}
],
"type": "rpc",
"tid": 0
}
]
Работа с JSON объектами в запросе
В таблице pd_users есть колонка jb_data, которая является объектом JSONB
Пример получения значения из данной колонки:
[
{
"action": "pd_users",
"method": "Query",
"data": [
{
"select": "id,jb_data"
}
],
"type": "rpc",
"tid": 0
}
]
== результат ==
...
"records": [
{
"id": 1,
"jb_data": null
},
{
"id": 2,
"jb_data": null
},
{
"id": -1,
"jb_data": {
"b_free": true
}
}
]
...
Пример выбора поля из JSONB
[
{
"action": "pd_users",
"method": "Query",
"data": [
{
"select": "id,jb_data.b_free::boolean as b_free"
}
],
"type": "rpc",
"tid": 0
}
]
== результат ==
"records": [
{
"id": 1,
"b_free": null
},
{
"id": 2,
"b_free": null
},
{
"id": -1,
"b_free": true
}
],
По умолчанию если не указать приведение к типу ::boolean будет получена строка
"select": "id,jb_data.b_free as b_free" == результат == "b_free": "true"