10. Описание эндпоинтов
10.1. GET /ping
Метод проверяет доступность сервера
GET /ping
URL
http://localhost:8080/smevql/api/v1/ping
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/ping' \
-H 'accept: plain/text'
Пример ответа:
pong
Параметр |
Тип данных |
Описание |
|---|---|---|
pong |
string |
Текстовый ответ при успешном отклике сервера |
10.2. GET /states
Метод выводит состояния стейт-машины на данный момент
GET /states
URL
http://localhost:8080/smevql/api/v1/states
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/states' \
-H 'accept: application/json'
Пример ответа:
[
{
"model": "book",
"states": [
{
"state": "appointment",
"attributes": [
{
"name": "type",
"value": "APPOINTMENT"
}
],
"initial": true,
"delete": false,
"static": false
},
{
"state": "cancel",
"attributes": [
{
"name": "type",
"value": "CANCEL"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "observation",
"attributes": [
{
"name": "type",
"value": "D_OBSERVATION"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "cancelled",
"attributes": [
{
"name": "type",
"value": "Cancel"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "deleted",
"attributes": [],
"initial": false,
"delete": true,
"static": false
}
],
"events": [
{
"event": "book",
"from": [
"appointment"
],
"to": "observation",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "observation",
"from": [
"appointment"
],
"to": "observation",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "cancel",
"from": [
"appointment",
"observation"
],
"to": "cancel",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "delete",
"from": [
"appointment",
"observation",
"cancel"
],
"to": "deleted",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
}
]
,
]
Параметр |
Тип данных |
Описание |
|---|---|---|
model |
string |
имя модели |
state |
string |
название состояния |
attributes |
array |
набор атрибутов, описывающих состояние |
name |
string |
имя атрибута |
value |
string |
значение атрибута для описываемого состояния |
initial |
boolean |
возможность создания записи |
events |
array |
список событий изменения состояний |
event |
string |
событие |
from |
string |
массив состояний из которых возможен вызов события |
to |
string |
в какое состояние переводится объект после события |
10.3. GET /states/{model}
Возвращает информацию о модели
GET /states/{model}
URL
http://localhost:8080/smevql/api/v1/states/{model}
Параметр |
Тип данных |
Описание |
|---|---|---|
model |
string |
имя модели |
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/states/{model}' \
-H 'accept: application/json'
Пример ответа:
[
{
"model": "book",
"states": [
{
"state": "appointment",
"attributes": [
{
"name": "type",
"value": "APPOINTMENT"
}
],
"initial": true,
"delete": false,
"static": false
},
{
"state": "cancel",
"attributes": [
{
"name": "type",
"value": "CANCEL"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "observation",
"attributes": [
{
"name": "type",
"value": "D_OBSERVATION"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "cancelled",
"attributes": [
{
"name": "type",
"value": "Cancel"
}
],
"initial": false,
"delete": false,
"static": false
},
{
"state": "deleted",
"attributes": [],
"initial": false,
"delete": true,
"static": false
}
],
"events": [
{
"event": "book",
"from": [
"appointment"
],
"to": "observation",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "observation",
"from": [
"appointment"
],
"to": "observation",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "cancel",
"from": [
"appointment",
"observation"
],
"to": "cancel",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
},
{
"event": "delete",
"from": [
"appointment",
"observation",
"cancel"
],
"to": "deleted",
"hooks": [],
"confirm": null,
"updatable": false,
"updatable_attributes": []
}
]
,
]
Параметр |
Тип данных |
Описание |
|---|---|---|
model |
string |
имя модели |
state |
string |
название состояния |
attributes |
array |
набор атрибутов, описывающих состояние |
name |
string |
имя атрибута |
value |
string |
значение атрибута для описываемого состояния |
initial |
boolean |
возможность создания записи |
events |
array |
список событий изменения состояний |
event |
string |
событие |
from |
string |
список состояний из которых возможен вызов события |
to |
string |
в какое состояние переводится объект после события |
10.4. POST /states/{model}/{event}
Метод обновляет данные состояния модели по указанному событию
Метод
POST /states/{model}/{event}
URL
http://localhost:8080/smevql/api/v1/states/{model}/{event}
Параметр |
Тип данных |
Описание |
|---|---|---|
model |
string |
имя модели |
event |
string |
событие |
В теле запроса нужно заполнить поля:
{
"state": {
"conditions": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
},
},
"credentials": {
"system": {
"mnemonic": "string",
"instance_id": "string",
"user_id": "string"
},
"request": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"sub_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"purpose_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"audit": true,
"audit_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"audit_token": "string"
}
}
}
Параметр |
Тип данных |
Описание |
|---|---|---|
state |
string |
название состояния |
conditions |
string |
указывается условие фильтрации записей (опционально) |
credentials |
array |
системные реквизиты |
mnemonic |
string |
мнемоника |
instance_id |
string |
идентификатор экземпляра |
user_id |
string |
идентификатор пользователя |
request |
array |
параметры запроса |
id |
string |
идентификатор запроса |
sub_id |
string |
идентификатор подзапроса |
name |
string |
имя запроса |
purpose_id |
string |
идентификатор события, породившего запрос |
audit |
boolean |
признак необходимости запроса аудита |
audit_id |
string |
идентификатор аудита |
audit_token |
string |
токен аудита |
Пример запроса:
curl -X 'POST' \
'http://localhost:8080/smevql/api/v1/states/{model}/{event}' \
-H 'accept: plain/text' \
-H 'Content-Type: application/json' \
-d '{
"state": {
"conditions": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
},
"payload": {
"book_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"patient_id": "string",
"booking_type": "string",
"case_number": "string",
"preliminary_reservation": true,
"email": "string",
"mobile_phone": "string",
"referral_id": "string",
"cards_id": "string"
}
},
"credentials": {
"system": {
"mnemonic": "string",
"instance_id": "string",
"user_id": "string"
},
"request": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"sub_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"purpose_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"audit": true,
"audit_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"audit_token": "string"
}
}
}'
Пример ответа:
{
"response": {
"state": "booked"
},
Параметр |
Тип данных |
Описание |
|---|---|---|
state |
string |
обновленный статус события |
10.5. GET /model
Метод выводит массив моделей сервера
GET /model
URL
http://localhost:8080/smevql/api/v1/model
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/model' \
-H 'accept: application/json'
Пример ответа:
"resources": {
"ticket1": {
"name": "ticket",
"description": "ticket",
"version": "1.0",
"available_versions": [
"1.0"
],
"fields": {
"id": {
"name": "id",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"passengerid": {
"name": "passengerid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"tripid": {
"name": "tripid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"number": {
"name": "number",
"type": [
"number",
"LONG"
],
"length": 0,
"nullable": "NULL",
"key": "PRIMARY"
},
"bycard": {
"name": "bycard",
"type": [
"boolean",
"BOOLEAN"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"price": {
"name": "price",
"type": [
"number",
"DOUBLE"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"sold": {
"name": "sold",
"type": [
"string",
"TIMESTAMP"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
}
},
"connections": {
"has_many": [],
"belongs_to": [
{
"passenger1": {
"primary_key": [
"id"
],
"foreign_key": [
"passengerid"
]
}
},
{
"trip1": {
"primary_key": [
"id"
],
"foreign_key": [
"tripid"
]
}
}
]
},
"restrictions": {
"personal_data": []
},
"conditions": {
"allowed": [],
"denied": [],
"always": []
},
"extract": {
"source": [
{
"name": "prostore",
"table": "smevql_test.ticket1",
"conditions": [
{
"eq": {
"field": "sold",
"extract": {
"source": "prostore",
"table": "smevql_test.ticket1",
"key": "sold",
"is": true
},
"isFallback": false
}
}
]
}
]
}
},
Параметр |
Тип данных |
Описание |
|---|---|---|
name |
string |
название модели |
version |
string |
текущая версия модели |
available_versions |
string |
доступные версии модели |
fields |
string |
список полей модели |
10.6. GET /model/{model}
Метод выводит данные выбранной модели
GET /model/{model}
URL
http://localhost:8080/smevql/api/v1/model/{model}
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/model/{model}' \
-H 'accept: application/json'
Пример ответа:
[
"ticket1": {
"name": "ticket",
"description": "ticket",
"version": "1.0",
"available_versions": [
"1.0"
],
"fields": {
"id": {
"name": "id",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"passengerid": {
"name": "passengerid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"tripid": {
"name": "tripid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"number": {
"name": "number",
"type": [
"number",
"LONG"
],
"length": 0,
"nullable": "NULL",
"key": "PRIMARY"
},
"bycard": {
"name": "bycard",
"type": [
"boolean",
"BOOLEAN"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"price": {
"name": "price",
"type": [
"number",
"DOUBLE"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"sold": {
"name": "sold",
"type": [
"string",
"TIMESTAMP"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
}
}
}
]
Параметр |
Тип данных |
Описание |
|---|---|---|
name |
string |
название модели |
version |
string |
текущая версия модели |
available_versions |
string |
доступные версии модели |
fields |
string |
список полей модели |
10.7. GET /model/{model}/{version}
Метод выводит версию выбранной модели
GET /model/{model}/{version}
URL
http://localhost:8080/smevql/api/v1/model/{model}/{version}
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/model/{model}/{version}' \
-H 'accept: application/json'
Пример ответа:
[
"ticket1": {
"name": "ticket",
"description": "ticket",
"version": "1.0",
"available_versions": [
"1.0"
],
"fields": {
"id": {
"name": "id",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"passengerid": {
"name": "passengerid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"tripid": {
"name": "tripid",
"type": [
"string",
"STRING"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"number": {
"name": "number",
"type": [
"number",
"LONG"
],
"length": 0,
"nullable": "NULL",
"key": "PRIMARY"
},
"bycard": {
"name": "bycard",
"type": [
"boolean",
"BOOLEAN"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"price": {
"name": "price",
"type": [
"number",
"DOUBLE"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
},
"sold": {
"name": "sold",
"type": [
"string",
"TIMESTAMP"
],
"length": 0,
"nullable": "NULL",
"key": "NONE"
}
}
}
]
Параметр |
Тип данных |
Описание |
|---|---|---|
name |
string |
название модели |
version |
string |
текущая версия модели |
available_versions |
string |
доступные версии модели |
fields |
string |
список полей модели |
10.8. GET /sources
Метод выводит массив источников сервера
GET /sources
URL
http://localhost:8080/smevql/api/v1/sources
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/sources' \
-H 'accept: application/json'
Пример ответа:
{
"prostore": [
{
"version": "1.0",
"adapter": "prostore",
"protocol": "http",
"host": "prostore",
"port": 9090,
"path": "api/v1/datamarts/query?format=json",
"headers": [
{
"content-type": "application/json"
}
],
"threads-count": 4,
"connection-timeout": 30,
"type": "rest"
}
],
"smevql": [
{
"version": "1.0",
"adapter": "smevql",
"protocol": "http",
"host": "smevql-server",
"port": 8080,
"path": "data?format=json",
"headers": [
{
"content-type": "application/json"
}
],
"threads-count": 4,
"connection-timeout": 30,
"type": "rest"
}
],
"csv-uploader": [
{
"version": "1.0",
"adapter": "confirm",
"protocol": "http",
"host": "csv-uploader",
"port": 8080,
"path": "version?format=json",
"headers": [
{
"content-type": "application/json"
}
],
"threads-count": 4,
"connection-timeout": 30,
"type": "rest"
}
]
}
Параметр |
Тип данных |
Описание |
|---|---|---|
version |
string |
версия |
adapter |
string |
имя адаптера |
protocol |
string |
протокол передачи данных |
host |
string |
хост сервера |
port |
int |
порт сервера |
path |
string |
путь к источнику |
headers |
array |
заголовки |
threads-count |
int |
кол-во потоков |
connection-timeout |
int |
время соединения |
type |
string |
тип взаимодействия с источником |
10.9. POST /data
Запрашивает данные ресурсов в синхронном режиме
POST /data
URL
http://localhost:8080/smevql/api/v1/data
При запросе необходимо указать Headers:
Key: content-type
Value: application/json
Тело запроса должно содержать два обязательных блока:
Блок query - описание требуемых ресурсов и условий фильтрации данных;
Блок credentials - общие данные запроса и информация о потребителе.
Пример блока query:
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00"
},
"attributes": [
"id",
"phone",
"name"
],
"cabinet": {
"conditions": {
"available": true
},
"attributes": [
"number",
"name",
"seats"
],
"online_room": {
"conditions": {
"public": true,
"software": "zoom"
},
"attributes": [
"url"
]
},
"parking": {
"conditions": {
"free": true,
"available": true
},
"attributes": [
"number",
"floor"
]
}
}
}
}
}
Пример блока credentials:
"credentials":{
"system":{
"mnemonic":"117bed7f-1c07-4079-a446-1161588db4e5",
"instance_id":"ccb4a88f-f44b-43e7-8a97-3e45c8345e90",
"user_id":"5ed38461-0907-486a-930a-7b443482932c"
},
"request":{
"id":"df5a0073-c6be-4d8c-8eb2-9b2f4188a429",
"sub_id":"0cdb59ce-224b-4118-8da1-c5ea08a5d955",
"name":"driver_data",
"purpose_id":"ed1170f1-3caa-4985-aa38-c9c5a190b770",
"audit":"false",
"audit_id":"fc1048fe-323d-4eeb-92df-5710b3d1d100",
"audit_token":"39e47aac-45d2-44c1-8c26-2d9b28b1703b"
},
"signature":[
{
"digest": null,
"signature": null,
"jsonpath": "/response"
}
]
}
Параметр |
Тип данных |
Описание |
Примечание |
|---|---|---|---|
query |
array |
атрибут запроса данных внутри указывается название сущности, данные которой нужно получить |
|
conditions |
string |
указывается условие фильтрации записей (опционально) |
|
fetch |
array |
опциональный блок условий |
|
attributes |
array |
Атрибуты, значения которых необходимо получить при выполнении запроса |
|
credentials |
object |
Объект, содержащий общие данные запроса и информация о потребителе |
|
mnemonic |
string |
мнемоника системы |
|
instance_id |
string |
идентификатор экземпляра системы |
|
user_id |
string |
идентификатор пользователя |
|
request |
object |
Объект описывает общие параметры запроса |
|
id |
string |
идентификатор запроса |
|
sub_id |
string |
идентификатор подзапроса |
|
name |
string |
имя запроса |
|
purpose_id |
string |
идентификатор события, инициировавшего запрос |
|
audit |
boolean |
возможность аудита |
|
audit_id |
string |
идентификатор аудита. Заполняется только, если audit = true |
|
audit_token |
string |
токен аудита. Заполняется только, если audit = true |
|
signature |
object |
Объект, описывает параметры ЭЦП |
|
digest |
string |
дайджест подписи (не заполняется) |
|
signature |
string |
подпись (не заполняется) |
Пример запроса:
curl -X 'POST' \
'http://localhost:8080/smevql/api/v1/data' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"query": {
"ticket": {
"conditions": {},
"attributes": [
"id",
"price"
]
}
},
"credentials": {
"system": {
"mnemonic": "3fa45f64-5717-4562-b3fc-2c963f66afa6",
"instance_id": "3fa45f64-5717-4562-b3fc-2c963f66afa6",
"user_id": "3fa45f64-5717-4562-b3fc-2c963f66afa6"
},
"request": {
"id": "6fa45f64-5717-4562-b3fc-2c963f66afa6",
"sub_id": "7fa45f64-5717-4562-b3fc-2c963f66afa6",
"name": "query",
"purpose_id": "8fa45f64-5717-4562-b3fc-2c963f66afa6",
"audit": true,
"audit_id": "9fa45f64-5717-4562-b3fc-2c963f66afa6",
"audit_token": "b3fc"
},
"signature": {
"digest": "digest",
"signature": "signature"
}
}
}'
Пример ответа:
{
"response": {
"ticket": [
{
"price": 298.8082301905419,
"id": "3424f5b3-e337-4d0d-a046-a1c491ab3300"
},
{
"price": 67.79323025646744,
"id": "ad14fce2-04f5-45b8-b430-3ff9efb5d4ca"
}
]
},
"credentials": {
"system": {
"mnemonic": "3fa45f64-5717-4562-b3fc-2c963f66afa6",
"instance_id": "4fa45f64-5717-4562-b3fc-2c963f66afa6",
"user_id": "5fa45f64-5717-4562-b3fc-2c963f66afa6"
},
"request": {
"id": "6fa45f64-5717-4562-b3fc-2c963f66afa6",
"sub_id": "7fa45f64-5717-4562-b3fc-2c963f66afa6",
"name": "query",
"purpose_id": "8fa45f64-5717-4562-b3fc-2c963f66afa6",
"audit": true,
"audit_id": "9fa45f64-5717-4562-b3fc-2c963f66afa6",
"audit_token": "b3fc"
},
"signature": {
"digest": "digest",
"signature": "signature"
},
"response": {
"id": "ec26f676-5931-11ee-9044-eb1795d841ef",
"sub_id": "ec26f677-5931-11ee-9044-eb1795d841ef",
"started_at": "2023-09-22 13:22:24.456 +0300",
"finished_at": "2023-09-22 13:22:24.530 +0300"
}
}
}
Параметр |
Тип данных |
Описание |
|---|---|---|
response |
object |
объект с описанием ресурсов, содержащих массивы данных запросов |
resourse_data |
array |
массивы данных, запрашиваемых ресурсов (имя объекта) |
10.9.1. Правила задания условий
Объединение условий только по and
Операции сравнения:
=(по умолчанию);>;>=;<;<=;in.
Условия сравнения применимы к численным типам, датам, временам и таймштампам.
10.9.2. Варианты определения условий фильтрации
Простое равенство
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00"
}
}
}
}
Сравнение краткое
{
"query": {
"office": {
"conditions": {
"area": [">","130"]
}
}
}
}
Сравнение полное
- {
- «query»: {
- «office»: {
- «conditions»: {
- «area»: {
«op»: «>», «value»: «130»
}
}
}
}
}
Комплексное условие
{
"query": {
"office": {
"conditions": {
"area": [">","130"],
"floor": ["in", [1, 2]]
}
}
}
}
В conditions СМЭВ QL запроса поддерживается возможность указывать логический ИЛИ через зарезервированное слово or.
В блок or необходимо передать массив объектов, содержащих условия в свою очередь объединённые логическим И (AND).
Все условия, находящиеся на одном уровне с or группируются через логическое И (AND), как при обычном СМЭВ QL Запросе.
Пример:
"conditions": {
"lastname": "П",
"middlename": "И",
"birthdate": "2021-11-29 00:00:00",
"or": [
{
"vin": "в1"
},
{
"vin2": "в2",
"model": "bmw"
}
],
"fetch": {
"order": [["id", "ASC"], ["number", "DESC"]], // ASC default
"page": [2, 10] // limit 10 offset 10
}
}
Условия описанного выше запроса (без учета fetch) соберутся в следующую конструкцию:
WHERE
(lastname = 'П' AND middlename = 'И' AND birthdate = '2021-11-29 00:00:00')
OR
(vin ='в1')
OR
(vin2='в2' AND model = 'bmw')
10.9.3. Подробное описание блока fetch
В блоке conditions опционально можно добавить блок fetch, в котором указывать:
условия сортировки (order);
условия выбора страниц (page);
условия выборки доступных для каждого ресурса событий машины состояния (show_events);
применение локализованных переменных (localize);
условия выбора версии данных на указанную дату, диапазон дат, дельту, диапазон дельт (for_system_time, for_system_time_started, for_system_time_finished).
"conditions": {
"lastname": "П",
"middlename": "И",
"birthdate": "2021-11-29 00:00:00",
"fetch": {
"order": [["id", "ASC"], ["number", "DESC"]], // ASC default
"page": [2, 10] // limit 10 offset 10
}
}
Если порядок сортировки не указан, то применяется ASC.
Если не указаны страницы, то по умолчанию всегда устанавливается первая страница с лимитом, равными параметру default блока pagination в файле конфигураций
application.yaml.
Если запрашивается элементов на страницу больше, чем значение max, то должно использоваться дефолтное значение.
В блок fetch можно добавить атрибут выборки доступных евентов (events стэйт-машины (Создание карты машины-состояний) show_events):
"conditions": {
"lastname": "П",
"middlename": "И",
"birthdate": "2021-11-29 00:00:00",
"fetch": {
"order": [["id", "ASC"], ["number", "DESC"]], // ASC default
"page": [2, 10] // limit 10 offset 10,
"show_events": true // false default
}
}
Если данный атрибут указан и возвращаемый объект управляется стейт-машиной, то его атрибуты дополняются доступными евентами в
атрибуте available_state_events:
"response": {
"office": [
{
"id": "10459",
"phone": "(347) 246-53-00",
"name": "ГБУЗ РБ Поликлиника № 50 г.Уфа, Кабинет вакцинации COVID-19",
"available_state_events": [ "book", "cancel" ]
},
{
"id": "10461",
"phone": "(347) 246-53-00",
"name": "ГБУЗ РБ Поликлиника № 50 г.Уфа, Кабинет вакцинации COVID-19",
"available_state_events": [ "book" ]
},
{
"id": "6344",
"phone": "(347) 246-53-00",
"name": "ГБУЗ РБ Поликлиника № 50 г.Уфа, отделение 26",
"available_state_events": [ "reserve", "cancel" ]
}
]
}
Если евентов нет, то выводится пустой массив. Если объект не управляется стейт-машиной, то директива просто игнорируется.
В блоке локализованных переменных localize можно задать массив произвольных именованных переменных.
Данные переменные можно указывать в качестве критерия отбора данных для других ресурсов.
При этом получение данных ресурса с критерием включающим локализованную переменную выполняется после получения данных ресурса, где эта переменная была определена.
Пример определения локализованных переменных:
"query": {
"mdm": {
"conditions": {
"eduejd": "00650abd-dde7-4a3b-a44e-475285ff276f",
"fetch": {
"localize": [
"eduejd01",
"eduejd02"
]
}
Пример указания локализованной переменной в качестве критерия отбора данных другого ресурса:
"students_eduejd01": {
"conditions": {
"id": "@mdm.eduejd01",
},
Примечание
Использование локализованных переменных допускается только для ресурсов, находящихся на одном уровне в запросе.
Если необходимо получить данные конкретной версии (версия может характеризоваться временной отметкой или номером дельты),
то в блоке fetch указывается соответствующий системный параметр:
for_system_time- получение текущих данных витрины на заданную отметку версии. Возможны следующие варианты определения отметки версии:Номер дельты (целое число), например:
"for_system_time": 231Время (timestamp), например:
"for_system_time": "2024-02-09 12:05:03"
for_system_time_started- получение новых/измененных данных витрины с заданным диапазоном версий. Возможны следующие варианты определения отметки диапазона версий:Диапазон номеров дельт, например:
"for_system_time_started": [210,215]Диапазон времени, например:
"for_system_time_started": ["2024-02-09 12:00:00","2024-02-09 15:59:59"]
for_system_time_finished- получение удалённых данных витрины с заданным диапазоном версий. Возможны следующие варианты определения отметки диапазона версий:Диапазон номеров дельт, например:
"for_system_time_finished": [210,215]Диапазон времени, например:
"for_system_time_finished": ["2024-02-09 12:00:00","2024-02-09 15:59:59"]
for_system_time_cn- получение текущих данных витрины на заданный номер операции (CN, целое число), например:"for_system_time_cn": 114;for_system_time_started_cn- получение новых/ измененных данных витрины с заданным диапазоном номеров операций, например:"for_system_time_started_cn": [110,115];for_system_time_finished_cn- получение удалённых данных витрины с заданным диапазоном номеров операций, например:"for_system_time_finished_cn": [110,115].
Общие правила работы с системными параметрами:
СМЭВ QL фиксирует время получения запроса для подстановки в запросы к ресурсам у которых не указана отметка.
Указание отметок времени может быть на уровне родительского ресурса, так и на уровне вложенного ресурса.
При наличии отметок и на уровне родительского и на уровне вложенного ресурса, приоритет имеет более близкая к ресурсу отметка.
При чтении данных ресурса из нескольких источников, фильтрация на основе отметки ресурса распространяется на все таблицы.
Для таблиц типа стенделон и прокси Простор игнорирует конструкцию
for system_time.Для не версионированных таблиц запросы с
for system_time as offвозвращают актуальное значение без учета отметки
b. Для не версионированных таблиц запросы с
for system_time started/finishedвозвращают пустое множество без учета отметок диапазонаПри наличии отметок на уровне запроса, она распространяется на все ресурсы, для которых метка не определена.
Совмещение в одном запросе различных режимов получения данных (добавленных и удаленных), например 1 ресурс добавленные записи, а 2 ресурс удаленные записи недопустимо, должен вернуться код 409 «Недопустимое сочетание условий выборки данных». Остальные сочетания режимов получения данных допустимы.
Метки времени на ресурсы сиблинги не распространяются.
Примеры запросов с указанием временных меток:
получение данных офисов и кабинетов на таймштамп
- {
- «query»: {
- «office»: {
- «conditions»: {
«phone»: «(347) 246-53-00», «fetch»: {
«for_system_time»: «2024-02-09 12:05:03»
}
}, «attributes»: [
«id», «phone», «name»
], «cabinet»: {
- «conditions»: {
«available»: true
}, «attributes»: [
«number», «name», «seats»
]
}
}
}
}
получение данных офисов на 120 дельту и кабинетов на 45 дельту
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00",
"fetch": {
"for_system_time": 120
}
},
"attributes": [
"id",
"phone",
"name"
],
"cabinet": {
"conditions": {
"available": true,
"fetch": {
"for_system_time": 45
}
},
"attributes": [
"number",
"name",
"seats"
]
}
}
}
}
получение данных офисов и кабинетов добавленных с 210 по 215 дельту
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00",
"fetch": {
"for_system_time_started": [210,215]
}
},
"attributes": [
"id",
"phone",
"name"
],
"cabinet": {
"conditions": {
"available": true
},
"attributes": [
"number",
"name",
"seats"
]
}
}
}
}
получение данных офисов и кабинетов удаленных за диапазон времени
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00",
"fetch": {
"for_system_time_finished": ["2024-02-09 12:00:00","2024-02-09 15:59:59"]
}
},
"attributes": [
"id",
"phone",
"name"
],
"cabinet": {
"conditions": {
"available": true
},
"attributes": [
"number",
"name",
"seats"
]
}
}
}
}
получение данных офисов на 231 дельту и всех актуальных кабинетов (сиблинг)
{
"query": {
"office": {
"conditions": {
"phone": "(347) 246-53-00",
"fetch": {
"for_system_time": 231
}
},
"attributes": [
"id",
"phone",
"name"
]
},
"cabinet": {
"conditions": {
"available": true
},
"attributes": [
"number",
"name",
"seats"
]
}
}
}
10.10. GET /server/indexes/required
Формирует рекомендации по индексам на основании описания моделей
GET /server/indexes/required
URL
http://localhost:8080/smevql/api/v1/server/indexes/required
Запрос отправляется без параметров
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/smevql/api/v1/server/indexes/required' \
-H 'accept: application/json'
Пример ответа:
{
"server": {
"mnemonic": "00000000-d759-11ed-84c6-47c59cf9ecf6",
"instance": "00000001-d759-11ed-84c6-47c59cf9ecf6"
},
"indexes": {
"connections": [
{
"source": "prostore",
"table": "smevql_test.ticket1",
"fields": [
"passengerid",
"tripid"
]
}
],
"conditions": [
{
"source": "prostore",
"table": "smevql_test.passenger1",
"fields": [
"lastname",
"firstname",
"code"
]
},
{
"source": "prostore",
"table": "mvd.vehicleregdata",
"fields": [
"vehiclevin",
"vehiclevin2"
]
}
]
}
}
}
Параметр |
Тип данных |
Описание |
|---|---|---|
server |
string |
данные сервера |
mnemonic |
string |
мнемоника |
instance |
string |
экземпляр сервера |
indexes |
string |
данные индекса |
connections |
array |
массив связей |
source |
string |
название источника |
table |
string |
название таблицы |
fields |
string |
список полей модели |
conditions |
array |
массив условий фильтрации записей |