Обзор API динамической модели данных (на примере класса 'abc/mnesia')
- Обзор
- Запросы
- Создание новой сущности в коллекции динамического класса
- Получение списка сущностей из коллекции динамического класса
- Получение данных сущности из коллекции динамического класса
- Изменение данных сущности из коллекции динамического класса
- Удаление сущности из коллекции динамического класса
- Очищает коллекцию динамического класса
- Поиск идентификатора сущности в коллекции динамического класса
- Рантайм-настройка коллекции коллекции динамического класса
- Содержание (дочерние ресурсы)
- Ссылки
Обзор
Позволяет производить CRUD операции с коллекцией динамического класса.
Также доступно проведение операций через Websocket-API (capability `rest`).
Поддерживаются операции с файлами вложений.
При указании пути со слэшем на конце, операция GET выдает список доступных разделов/коллекций дочернего уровня.
Запросы
HTTP verb | Endpoint | Описание |
---|---|---|
|
|
|
|
|
Получение списка сущностей из коллекции динамического класса |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Поиск идентификатора сущности в коллекции динамического класса |
|
|
Создание новой сущности в коллекции динамического класса
Запрос
Описание полей: определяются на основании настроек свойств класса (class entity)
POST /rest/v1/model/abc/mnesia HTTP/1.1
Content-Type: application/json; charset=utf-8
определяются на основании настроек свойств класса (class entity)
Ответ
Описание полей: определяются на основании настроек свойств класса (class entity)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"id": "6f7d27df-017b-ab81-77e7-7cd30a921f58",
"patts":[],
"pbool": false,
"penum": "i1",
"pint": 8640000,
"plong": 1630924984167,
"pstr": "asdfasdfasdf"
}
Получение списка сущностей из коллекции динамического класса
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Фильтр элементов. Представляет собой логическое выражение в польской нотации. Задается в виде json-массива, представляющего собой польскую нотацию сложного логического выражения. Первый элемент любого массива - название функции (строка), второй и последующий элементы списка - аргументы функции, каждый из которых в свою очередь может быть выражением (json-массивом). Примеры:
|
|
|
Порядок сортировки ресурсов в списке. Применяет последовательность полей, где по каждому определено направление сортировки, при совпадении значений применяет следующее поле. Примеры:
|
|
|
Список полей для вывода. Доступные поля для выдачи: (настраивается в опциях конкретного класса - поле `max_mask`). Допускается указывать композитные поля как целиком, так и с указанием интересующих вложенных опций через точку вне зависимости от значения параметра flat. Пример:
|
|
|
Смещение в списке ресурсов, подлежащих выдаче.
Порядковый номер с нуля в отфильтрованном ( Пример:
|
|
|
Максимальное количество ресурсов, подлежащее выдаче из отфильтрованного ( Пример:
|
|
|
Флаг-указатель необходимости выдачи лишь количества элементов, попадающих под условия фильтра. |
|
|
Для коллекций типа 'history' и 'transactionlog' обязательный параметр, указывающий временной интервал для выборки данных. При этом для обращения к эндпойнту конкретного элемента таких коллекций необходимо использовать дату как промежуточный отрезок пути. |
|
|
Дескриптор агрегирующих значений. Ключ - произвольное название поля, значение - агрегирующие выражение (где основная функция - агрегирующая). Используется совместно с параметром 'groupby'. Пример:
|
|
|
Дескриптор группирующих полей или выражений. Ключ - произвольное название поля, значение - название реально существующего поля класса, либо выражение, аналогичное фильтру, однако не обязательно логическое. Используется совместно с параметром 'aggr'. Пример:
|
Функция (и синонимы) | Количество аргументов | Описание |
---|---|---|
|
|
Доступ к любому полю сущности, в том числе по глубокому пути в сложных объектных и списочных полях. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функция (и синонимы) | Количество аргументов | Описание |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GET /rest/v1/model/abc/mnesia?offset=0&limit=2 HTTP/1.1
Ответ
Описание полей: определяются на основании настроек свойств класса (class entity)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
[
{
"id": "6f7d27df-017b-ab81-77e7-7cd30a921f58",
"patt":{
"hasha": "md5;A95C530A7AF5F492A74499E70578D150",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patt/content",
"mtime": "2021-09-07T10:47:06Z",
"name": "content",
"size": 12
},
"patts":[
{
"hasha": "md5;2B00042F7481C7B056C4B410D28F33CF",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/app.mp3",
"mtime": "2021-09-07T10:47:47Z",
"name": "app.mp3",
"size": 538925
},
{
"hasha": "md5;236C8E5A21AF6E369045F004B1CAEA1C",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/test.json",
"mtime": "2021-09-07T10:47:47Z",
"name": "test.json",
"size": 14
}
],
"pbool": false,
"penum": "i1",
"pint": 8640000,
"plong": 1630924984167,
"pstr": "asdfasdfasdf"
}
]
Получение данных сущности из коллекции динамического класса
Запрос
Имя | Тип | Описание |
---|---|---|
|
|
Список полей для вывода. |
|
|
Преобразование в плоский вид составных полей. |
GET /rest/v1/model/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58 HTTP/1.1
Ответ
Описание полей: определяются на основании настроек свойств класса (class entity)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"id": "6f7d27df-017b-ab81-77e7-7cd30a921f58",
"patt":{
"hasha": "md5;A95C530A7AF5F492A74499E70578D150",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patt/content",
"mtime": "2021-09-07T10:47:06Z",
"name": "content",
"size": 12
},
"patts":[
{
"hasha": "md5;2B00042F7481C7B056C4B410D28F33CF",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/app.mp3",
"mtime": "2021-09-07T10:47:47Z",
"name": "app.mp3",
"size": 538925
},
{
"hasha": "md5;236C8E5A21AF6E369045F004B1CAEA1C",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/test.json",
"mtime": "2021-09-07T10:47:47Z",
"name": "test.json",
"size": 14
}
],
"pbool": false,
"penum": "i1",
"pint": 8640000,
"plong": 1630924984167,
"pstr": "asdfasdfasdf"
}
Изменение данных сущности из коллекции динамического класса
Операция проводит предварительное чтение, и затем слияние текущего объекта с переданным значением.
-
Значение 'null' обнуляет поле.
-
Значения полей с типом 'any' вместо замещения смешиваются в глубину на количество уровней, указанное в опциях соответствующего поля.
-
Значения всех полей, имеющих опцию 'multi' (массивы), могут добавляться в конец текущих значений, если в запросе передан параметр 'append' (append=true).
-
Сущности с типом хранения 'runtime' и настроенным режимом автоматического удаления могут продлять время жизни при обновлении.
Поля запрещенные для изменения: id
Запрос
Описание полей: определяются на основании настроек свойств класса (class entity)
PATCH /rest/v1/model/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58 HTTP/1.1
Content-Type: application/json; charset=utf-8
определяются на основании настроек свойств класса (class entity)
Ответ
Описание полей: определяются на основании настроек свойств класса (class entity)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"id": "6f7d27df-017b-ab81-77e7-7cd30a921f58",
"patt":{
"hasha": "md5;A95C530A7AF5F492A74499E70578D150",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patt/content",
"mtime": "2021-09-07T10:47:06Z",
"name": "content",
"size": 12
},
"patts":[
{
"hasha": "md5;2B00042F7481C7B056C4B410D28F33CF",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/app.mp3",
"mtime": "2021-09-07T10:47:47Z",
"name": "app.mp3",
"size": 538925
},
{
"hasha": "md5;236C8E5A21AF6E369045F004B1CAEA1C",
"link": "fs://1a2325b6-017b-abab-bba4-7cd30a921f58/fstest_attaches/test.rootdomain.ru/abc/mnesia/6f7d27df-017b-ab81-77e7-7cd30a921f58/patts/test.json",
"mtime": "2021-09-07T10:47:47Z",
"name": "test.json",
"size": 14
}
],
"pbool": true,
"penum": "i2",
"pint": 8640000,
"plong": 1630924984167,
"pstr": "Other value"
}
Удаление сущности из коллекции динамического класса
Поиск идентификатора сущности в коллекции динамического класса
Производит поиск ресурса по указанному ключу, возвращает идентификатор(ы) для построения endpoint.
Ключевые поля для поиска: (идентификатор и поля, настроенные в опциях конкретного класса - поле `lookup_properties`)
Рантайм-настройка коллекции коллекции динамического класса
Производит рантайм-настройку коллекции, изменяя поведение.
{ "cmd": ..., ... }
Виды команд ('cmd'):
-
suspend_notification
- временно приостанавливает отправку уведомлений об изменении сущностей класса (действует до отмены или перезагрузки микросервиса). Этот режим может применяться при масштабных операциях модификации при сотнях и тысячах подписчиков. -
resume_notification
- возобновляет ранее приостановленную отправку уведомлений. Одновременно может отправлять (по умолчанию) или не отправлять всем актуальным подписчикам событие об операции 'reload' (дополнительный опциональный параметр 'send_reload').