Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Работа с данными класса через API

Материал из Платформа Эра. Документации
Версия от 14:02, 28 марта 2025; AZykov (обсуждение | вклад) (Новая страница: «Создадим два класса и заполним небольшим количеством данных: * demo/Customers (свойства - name, address). Режим хранилища - category * demo/Orders (свойства - datetime, customer, description, cost). Режим хранилища - history Доступ к данным всех классов продуктового слоя возможен через REST API. Подроб...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Создадим два класса и заполним небольшим количеством данных:

  • 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