Создадим два класса и заполним небольшим количеством данных:
- demo/Customers (свойства - name, address). Режим хранилища - category
- demo/Orders (свойства - datetime, customer, description, cost). Режим хранилища - history
Доступ к данным всех классов продуктового слоя возможен через REST API. Подробное описание принципов работы методов GET/POST/PUT/PATCH/DELETE приведено на ресурсе Vendor.
После входа в систему можно выполнять GET-запросы через браузер. Для выполнения других методов удобно использовать сторонние утилиты (например, Talend API Tester).
Получение коллекции:
http://localhost/rest/v1/model/demo/Customers:
[
{
"address": null,
"id": "d6cf6060-ea44-48aa-8670-1d37b963a2b6",
"name": "Сергей Петрович"
},
{
"address": "пр. Мира д. 1",
"id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"name": "Михаил Иванович"
},
{
"address": "г. Калининград",
"id": "5f347978-dba0-4180-b702-eac35923fcd0",
"name": "Яков Игоревич"
}
Получение сущности по идентификатору: http://localhost/rest/v1/model/demo/Customers/6208fd97-2b80-41a5-85b2-95649bcde981:
{
"address": "пр. Мира д. 1",
"id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"name": "Михаил Иванович"
}
При больших объемах данных в хранилище выдача будет ограничена (максимальное количество строк можно указать в параметрах класса). Для постраничного получения коллекции предназначены параметры limit и offset: http://localhost/rest/v1/model/demo/Customers?limit=1&offset=2
[
{
"address": "г. Калининград",
"id": "5f347978-dba0-4180-b702-eac35923fcd0",
"name": "Яков Игоревич"
}
]
Для сортировки данных предназначен параметр order: http://localhost/rest/v1/model/demo/Customers?order=[{"name":"desc"}]
[
{
"address": "г. Калининград",
"id": "5f347978-dba0-4180-b702-eac35923fcd0",
"name": "Яков Игоревич"
},
{
"address": null,
"id": "d6cf6060-ea44-48aa-8670-1d37b963a2b6",
"name": "Сергей Петрович"
},
{
"address": "пр. Мира д. 1",
"id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"name": "Михаил Иванович"
}
]
Для получения коллекции history обязательно указать интервал:
http://localhost/rest/v1/model/demo/Orders:
{"error_code":1413,"error_message":"Expected 'interval' parameter: [From, To]"}
http://localhost/rest/v1/model/demo/Orders?interval=["2022-01-01","2022-02-01"]:
[
{
"cost": 35000,
"customer_id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"datetime": "2022-01-06T08:10:00Z",
"description": "Телевизор",
"id": "43a538d5-a5ee-4f14-85d1-534545fa5565"
},
{
"cost": 55000,
"customer_id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"datetime": "2022-01-06T16:00:00Z",
"description": "Холодильник",
"id": "da396bd0-64e2-466f-a2c8-f6f3b054417b"
},
{
"cost": 10000,
"customer_id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"datetime": "2022-01-04T08:00:00Z",
"description": "Пылесос",
"id": "c3b903be-a534-406b-8842-407f54ffdc43"
}
]
Важно помнить, что значения типа дата-время хранятся и обрабатываются в часовом поясе UTC
Средства по работе с интервалами
При работе с коллекциями history из продуктового слоя в качестве интервала можно указывать одну из следующих констант, которые будут автоматически конвертированы в массив из двух элементов с учетом текущего времени:
- now
- hour
- day
- week
- month
- year
- currentHour
- currentDay = today
- currentWeek
- currentMonth
- currentYear
full – интервал с 01.01.1900 по 01.01.2100
Для использования в отчетах, календарях и других элементах управления на базе классов history предусмотрены стандартные фильтры с полями timeStartFrom и timeStartTo:
- platform/HistoryInputToday
- platform/HistoryInputWeek
- platform/HistoryInputMonth
- platform/HistoryInputYear
- platform/HistoryInputFutureWeek
Для фильтрации данных предназначен параметр filter.
Синтаксис параметра – массив, представляющий собой польскую запись выражений. Первый элемент массива – оператор, последующие – его аргументы.
Примеры:
- http://localhost/rest/v1/model/demo/Customers?filter=["==",["property","name"], ["const","Михаил Иванович"]]
- http://localhost/rest/v1/model/demo/Customers?filter=["like",["property","name"], ["const","*е*"]]
- http://localhost/rest/v1/model/demo/Customers?filter=["and",["like",["property","name"], ["const","*е*"]],["isnotnull",["property","address"]]]
Поддерживаются следующие функции (после слеша указано количество аргументов, в скобках – синонимы):
- isnull/1
- isnotnull/1
- not/1 ('!')
- bool/1
- integer/1
- float/1
- string/1
- uuid/1
- const/1
- lower/1
- upper/1
- year/1 ('toYYYY','toYear')
- quarter/1
- month/1
- day/1
- hour/1
- minute/1
- second/1
- weekday/1
- toYYYYMM/1
- toYYYYMMDD/1
- concat/any ('.')
- join/any ('..')
- list/any
- null/0
- +/any ('add')
- -/2 ('sub')
- */2 ('mul')
- //2 ('div')
- ///2 ('ddiv')
- %/2 ('rem')
- &&/any ('and')
- ||/any ('or')
- ==/2 ('equal','equals')
- !=/2 ('notequal','notequals','<>')
- >/2 ('greater')
- >=/2 ('notless','greaterorequal')
- </2 ('less')
- <=/2 ('notgreater','lessorequal','=<')
- in/2
- contains/2
- like/2
- interval_in_minutes/2
- dateadd/2
- datediff/2
- between/3
Для построения агрегирующих выборок предназначены параметры groupby и aggr:
http://localhost/rest/v1/model/demo/Orders?interval=["2022-01-01","2022-02- 01"]&groupby={"customer_id":["property","customer_id"]}&aggr={"count":["count",1],"sum": ["sum",["property","cost"]],"avg":["avg",["property","cost"]]}:
[
{
"avg": 33333.333333333336,
"count": 3,
"customer_id": "6208fd97-2b80-41a5-85b2-95649bcde981",
"sum": 100000
}
]
Поддерживаются следующие агрегирующие функции:
- count/1
- sum/1
- min/1
- max/1
- avg/1
- and/1
- or/1
- join/2