Запросы

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