Все запросы должны выполняться только после авторизации пользователя и отправляться методом 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"