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
Таблица 10.1 Описание ответа

Параметр

Тип данных

Описание

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": []
          }
      ]
   ,
]
Таблица 10.2 Описание ответа

Параметр

Тип данных

Описание

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}
Таблица 10.3 Параметры запроса

Параметр

Тип данных

Описание

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": []
          }
      ]
   ,
]
Таблица 10.4 Описание ответа

Параметр

Тип данных

Описание

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}
Таблица 10.5 Параметры запроса

Параметр

Тип данных

Описание

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"
    }
  }
}
Таблица 10.6 Параметры запроса

Параметр

Тип данных

Описание

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"
},
Таблица 10.7 Описание ответа

Параметр

Тип данных

Описание

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
                            }
                        }
                    ]
                }
            ]
        }
    },
Таблица 10.8 Описание ответа

Параметр

Тип данных

Описание

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"
          }
      }
  }
]
Таблица 10.9 Описание ответа

Параметр

Тип данных

Описание

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"
          }
      }
  }
]
Таблица 10.10 Описание ответа

Параметр

Тип данных

Описание

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"
        }
    ]
}
Таблица 10.11 Описание ответа

Параметр

Тип данных

Описание

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"
    }
    ]
}
Таблица 10.12 Параметры запроса

Параметр

Тип данных

Описание

Примечание

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"
        }
    }
}
Таблица 10.13 Описание ответа

Параметр

Тип данных

Описание

response

object

объект с описанием ресурсов, содержащих массивы данных запросов

resourse_data

array

массивы данных, запрашиваемых ресурсов (имя объекта)

10.9.1. Правила задания условий

  1. Объединение условий только по and

  2. Операции сравнения:

    • = (по умолчанию);

    • >;

    • >=;

    • <;

    • <=;

    • in.

  3. Условия сравнения применимы к численным типам, датам, временам и таймштампам.

10.9.2. Варианты определения условий фильтрации

  1. Простое равенство

{
    "query": {
        "office": {
            "conditions": {
                "phone": "(347) 246-53-00"
            }
        }
    }
}
  1. Сравнение краткое

{
    "query": {
        "office": {
            "conditions": {
                "area": [">","130"]
            }
        }
    }
}
  1. Сравнение полное


{
«query»: {
«office»: {
«conditions»: {
«area»: {

«op»: «>», «value»: «130»

}

}

}

}

}

  1. Комплексное условие

{
    "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"]

Общие правила работы с системными параметрами:

  1. СМЭВ QL фиксирует время получения запроса для подстановки в запросы к ресурсам у которых не указана отметка.

  2. Указание отметок времени может быть на уровне родительского ресурса, так и на уровне вложенного ресурса.

  3. При наличии отметок и на уровне родительского и на уровне вложенного ресурса, приоритет имеет более близкая к ресурсу отметка.

  4. При чтении данных ресурса из нескольких источников, фильтрация на основе отметки ресурса распространяется на все таблицы.

  5. Для таблиц типа стенделон и прокси Простор игнорирует конструкцию for system_time.

    1. Для не версионированных таблиц запросы с for system_time as off возвращают актуальное значение без учета отметки

    b. Для не версионированных таблиц запросы с for system_time started/finished возвращают пустое множество без учета отметок диапазона

  6. При наличии отметок на уровне запроса, она распространяется на все ресурсы, для которых метка не определена.

  7. Совмещение в одном запросе различных режимов получения данных (добавленных и удаленных), например 1 ресурс добавленные записи, а 2 ресурс удаленные записи недопустимо, должен вернуться код 409 «Недопустимое сочетание условий выборки данных». Остальные сочетания режимов получения данных допустимы.

  8. Метки времени на ресурсы сиблинги не распространяются.

Примеры запросов с указанием временных меток:

получение данных офисов и кабинетов на таймштамп


{
«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"
            ]
        }
      ]
    }
  }
}
Таблица 10.14 Описание ответа

Параметр

Тип данных

Описание

server

string

данные сервера

mnemonic

string

мнемоника

instance

string

экземпляр сервера

indexes

string

данные индекса

connections

array

массив связей

source

string

название источника

table

string

название таблицы

fields

string

список полей модели

conditions

array

массив условий фильтрации записей