'rest' capability для WebSocket User API
Обзор
Предоставляет интерфейс для проведения CRUD операций с сущностями статических и динамических классов.
Для работы требует наличия у пользователя роли, разрешающей доступ к маршруту /ws#rest
с методом WEBSOCKET
.
При запросах осуществляет дополнительную ролевую авторизацию на доступ к конкретным endpoint REST-API на конкретную операцию. Различаются endpoint коллекции, конкретных элементов коллекции, а также свойств для доступа к вложениям. Так, если пользователю маршрутами в ролях разрешен лишь метод GET к коллекции класса, то он сможет читать коллекцию, но не сможет читать конкретную сущность и изменять и создавать сущности.
Каждое непустое изменение завершается генерацией уведомлений подписчикам.
Никаких событий rest-capability не генерирует.
Среди классов, к которым возможно обращение:
-
Статические коллекции доменного центра;
-
Динамические коллекции модели данных;
-
Специальные коллекции.
Построение запросов
-
Общий вид запроса:
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "...", "classpath": "/rest/v1/...", ... } ]
Обязательные поля запроса:
-
operation
- тип операции над классом (read, create, replace, update, delete, clear, lookup). -
classpath
- полный путь к коллекции класса в REST-API: "/rest/v1/model/builder/packages/Packages",
Специфические поля запроса:
-
interval
- список из двух дат (начало и конец периода). Необходим к указанию в операциях выборки из коллекций динамических классов, имеющихstorage_mode
=history
илиtransactionlog
. -
id
- идентификатор конкретной сущности. При проведении операций с коллекцией (выборка элементов, поиск, очистка коллекции) необходимо исключать поле из запроса. -
content
- содержимое запроса. Необходимо при создании, замене, изменении сущности (json-объект), а также в случае поиска по ключу (значение подлежащее поиску - строка или число).
Поля условий выборки - все опциональны:
-
filter
- условие фильтра. См. функции общего назначения. -
order
- порядок сортировки. -
mask
- поля выдачи. -
offset
- смещение в выборке. -
limit
- ограничение количества элементов в выборке. -
aggr
- поля агрегации. Объект, содержащий ключами возвращаемые поля, а значениями - функции агрегации. В качестве аргумента допускает применение суперпозиции функций, построение которой аналогично функциям фильтра. См. (функции агрегации). -
groupby
- база агрегации. Объект, содержащий ключами возвращаемые поля, а значениями - названия полей объекта или список, представляющий собой суперпозицию функций. Построение функций аналогично функциям фильтра. См. (функции общего назначения).
Поддерживаются операции:
-
read
- выборка из коллекции, в том числе агрегирующая. -
read
- если указано полеid
, то в ответ на запрос возвращаются данные конкретной сущности, имеющей указанный идентификатор. Опционально допускается маскировка (mask
). -
lookup
- поиск идентификаторов элементов коллекции по ключевым полям. Значение для поиска передается в полеcontent
. -
clear
- очистка коллекции. Поддерживается только в коллекциях динамических классов. -
post
- создание сущности в коллекции с автогенерацией идентификатора. -
replace
- создание или полная замена сущности с указанным идентификатором. Поддерживается только в коллекциях динамических классов. -
update
- изменение существующей сущности с указанным идентификатором. Неуказанные поля остаются неизменными. В коллекциях динамических классов (dms) производится замещение значений полей целиком. В коллекциях статических классов (dc) композитные поля допускают частичное обновление на 1 уровень в глубину. -
delete
- удаление существующей сущности с указанным идентификатором.
Примеры запросов к статическим и динамическим коллекциям
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "read", "classpath": "/rest/v1/model/builder/packages/Packages", "filter": ["or",["like",["property","pstr"],"asdf*"],["==",["property","pint"],8640000]], "order": ["pstr",{"pint","desc"},{"id","asc"}], "mask": ["id","pstr"], "offset": 0, "limit": 2 } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "read", "classpath": "/rest/v1/model/builder/packages/Packages", "filter": ["like",["property","pstr"],"a*"], "groupby":{"a":["%",["property","pint"],10]}, "aggr":{"cnt":["sum",["-",["property","pint"],1]]} "offset": 0, "limit": 2 } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "lookup", "classpath": "/rest/v1/model/builder/packages/Packages", "content": "abc" } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "clear", "classpath": "/rest/v1/model/builder/packages/Packages" } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "read", "classpath": "/rest/v1/model/builder/packages/Packages", "id": "c87a8ca6-0f08-91b7-9d19-2fa86f019916" } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "create", "classpath": "/rest/v1/model/builder/packages/Packages", "id": "c87a8ca6-0f08-91b7-9d19-2fa86f019916", "content": { ... } } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "replace", "classpath": "/rest/v1/model/builder/packages/Packages", "id": "c87a8ca6-0f08-91b7-9d19-2fa86f019916", "content": { ... } } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "update", "classpath": "/rest/v1/model/builder/packages/Packages", "id": "c87a8ca6-0f08-91b7-9d19-2fa86f019916", "content": { ... } } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09db22", "operation": "delete", "classpath": "/rest/v1/model/builder/packages/Packages", "id": "c87a8ca6-0f08-91b7-9d19-2fa86f019916" } ]
Специальные коллекции
/rest/v1/domain/nservices
Выполнение запросов к наносервисам продуктового слоя.
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda0915f7", "operation": "read", "classpath": "/rest/v1/domain/nservices" } ]
[ "rest", { "qid": "16066361-dfc0-49f6-b734-9b3dda0915f7", "data": [ {"name":"builder.DataService"}, {"name":"builder.GeneratorService"} ] } ]
[ "rest", { "qid":"16066361-dfc0-49f6-b734-9b3dda09472e", "operation": "create", "classpath": "/rest/v1/domain/nservices", "name": "platform.PerfmonService", "method": "test", "request": {"a":1,"b":"2","cc":[{"d":100,"e":"200"},{"f":300}]} } ]
[ "rest_result", { "qid": 1, "data": { "result": "ok", "code": "success", "response": {"a":"zxcvzxcvzxcv"} } } ]
Подробнее в разделе Выполнение HTTP запросов к активным наносервисам продуктового слоя
Ссылки
-
Функции общего назначения для фильтра и базы агрегации