.. _endpoints: Описание эндпоинтов ==================== GET /ping --------- Метод проверяет доступность сервера .. code-block:: GET /ping URL .. code-block:: http://localhost:8080/smevql/api/v1/ping Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/ping' \ -H 'accept: plain/text' Пример ответа: .. code-block:: pong .. table:: Описание ответа +----------+------------+----------------------------------------------+ | Параметр | Тип данных | Описание | +==========+============+==============================================+ | pong | string | Текстовый ответ при успешном отклике сервера | +----------+------------+----------------------------------------------+ GET /states --------------- Метод выводит состояния стейт-машины на данный момент .. code-block:: GET /states URL .. code-block:: http://localhost:8080/smevql/api/v1/states Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/states' \ -H 'accept: application/json' Пример ответа: .. code-block:: [ { "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": [] } ] , ] .. table:: Описание ответа +----------------------+------------+-----------------------------+ | Параметр | Тип данных | Описание | +======================+============+=============================+ | model | string | имя модели | +----------------------+------------+-----------------------------+ | state | string | название состояния | +----------------------+------------+-----------------------------+ | attributes | array | набор атрибутов, | | | | описывающих состояние | +----------------------+------------+-----------------------------+ | name | string | имя атрибута | +----------------------+------------+-----------------------------+ | value | string | значение атрибута для | | | | описываемого состояния | +----------------------+------------+-----------------------------+ | initial | boolean | возможность создания записи | +----------------------+------------+-----------------------------+ | events | array | список событий изменения | | | | состояний | +----------------------+------------+-----------------------------+ | event | string | событие | +----------------------+------------+-----------------------------+ | from | string | массив состояний из | | | | которых возможен вызов | | | | события | +----------------------+------------+-----------------------------+ | to | string | в какое состояние | | | | переводится объект после | | | | события | +----------------------+------------+-----------------------------+ GET /states/{model} ------------------- Возвращает информацию о модели .. code-block:: GET /states/{model} URL .. code-block:: http://localhost:8080/smevql/api/v1/states/{model} .. table:: Параметры запроса +----------+------------+-----------------+ | Параметр | Тип данных | Описание | +==========+============+=================+ | model | string | имя модели | +----------+------------+-----------------+ Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/states/{model}' \ -H 'accept: application/json' Пример ответа: .. code-block:: [ { "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": [] } ] , ] .. table:: Описание ответа +----------------------+------------+-----------------------------+ | Параметр | Тип данных | Описание | +======================+============+=============================+ | model | string | имя модели | +----------------------+------------+-----------------------------+ | state | string | название состояния | +----------------------+------------+-----------------------------+ | attributes | array | набор атрибутов, | | | | описывающих состояние | +----------------------+------------+-----------------------------+ | name | string | имя атрибута | +----------------------+------------+-----------------------------+ | value | string | значение атрибута для | | | | описываемого состояния | +----------------------+------------+-----------------------------+ | initial | boolean | возможность создания записи | +----------------------+------------+-----------------------------+ | events | array | список событий изменения | | | | состояний | +----------------------+------------+-----------------------------+ | event | string | событие | +----------------------+------------+-----------------------------+ | from | string | список состояний из | | | | которых возможен вызов | | | | события | +----------------------+------------+-----------------------------+ | to | string | в какое состояние | | | | переводится объект после | | | | события | +----------------------+------------+-----------------------------+ .. _post_states_model_event: POST /states/{model}/{event} ----------------------------------- Метод обновляет данные состояния модели по указанному событию Метод .. code-block:: POST /states/{model}/{event} URL .. code-block:: http://localhost:8080/smevql/api/v1/states/{model}/{event} .. table:: Параметры запроса +----------+------------+-----------------+ | Параметр | Тип данных | Описание | +==========+============+=================+ | model | string | имя модели | +----------+------------+-----------------+ | event | string | событие | +----------+------------+-----------------+ В теле запроса нужно заполнить поля: .. code-block:: { "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" } } } .. table:: Параметры запроса +-------------------------+------------+------------------------------------------------------+ | Параметр | Тип данных | Описание | +=========================+============+======================================================+ | 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 | токен аудита | +-------------------------+------------+------------------------------------------------------+ Пример запроса: .. code-block:: 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" } } }' Пример ответа: .. code-block:: { "response": { "state": "booked" }, .. table:: Описание ответа +--------------------+------------+----------------------------+ | Параметр | Тип данных | Описание | +====================+============+============================+ | state | string | обновленный статус события | +--------------------+------------+----------------------------+ GET /model ------------ Метод выводит массив моделей сервера .. code-block:: GET /model URL .. code-block:: http://localhost:8080/smevql/api/v1/model Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/model' \ -H 'accept: application/json' Пример ответа: .. code-block:: "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 } } ] } ] } }, .. table:: Описание ответа +--------------------+------------+----------------------------+ | Параметр | Тип данных | Описание | +====================+============+============================+ | name | string | название модели | +--------------------+------------+----------------------------+ | version | string | текущая версия модели | +--------------------+------------+----------------------------+ | available_versions | string | доступные версии модели | +--------------------+------------+----------------------------+ | fields | string | список полей модели | +--------------------+------------+----------------------------+ GET /model/{model} -------------------- Метод выводит данные выбранной модели .. code-block:: GET /model/{model} URL .. code-block:: http://localhost:8080/smevql/api/v1/model/{model} Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/model/{model}' \ -H 'accept: application/json' Пример ответа: .. code-block:: [ "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" } } } ] .. table:: Описание ответа +--------------------+------------+----------------------------+ | Параметр | Тип данных | Описание | +====================+============+============================+ | name | string | название модели | +--------------------+------------+----------------------------+ | version | string | текущая версия модели | +--------------------+------------+----------------------------+ | available_versions | string | доступные версии модели | +--------------------+------------+----------------------------+ | fields | string | список полей модели | +--------------------+------------+----------------------------+ GET /model/{model}/{version} ------------------------------ Метод выводит версию выбранной модели .. code-block:: GET /model/{model}/{version} URL .. code-block:: http://localhost:8080/smevql/api/v1/model/{model}/{version} Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/model/{model}/{version}' \ -H 'accept: application/json' Пример ответа: .. code-block:: [ "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" } } } ] .. table:: Описание ответа +--------------------+------------+----------------------------+ | Параметр | Тип данных | Описание | +====================+============+============================+ | name | string | название модели | +--------------------+------------+----------------------------+ | version | string | текущая версия модели | +--------------------+------------+----------------------------+ | available_versions | string | доступные версии модели | +--------------------+------------+----------------------------+ | fields | string | список полей модели | +--------------------+------------+----------------------------+ GET /sources -------------------------- Метод выводит массив источников сервера .. code-block:: GET /sources URL .. code-block:: http://localhost:8080/smevql/api/v1/sources Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/sources' \ -H 'accept: application/json' Пример ответа: .. code-block:: { "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" } ] } .. table:: Описание ответа +--------------------+------------+--------------------------+ | Параметр | Тип данных | Описание | +====================+============+==========================+ | version | string | версия | +--------------------+------------+--------------------------+ | adapter | string | имя адаптера | +--------------------+------------+--------------------------+ | protocol | string | протокол передачи данных | +--------------------+------------+--------------------------+ | host | string | хост сервера | +--------------------+------------+--------------------------+ | port | int | порт сервера | +--------------------+------------+--------------------------+ | path | string | путь к источнику | +--------------------+------------+--------------------------+ | headers | array | заголовки | +--------------------+------------+--------------------------+ | threads-count | int | кол-во потоков | +--------------------+------------+--------------------------+ | connection-timeout | int | время соединения | +--------------------+------------+--------------------------+ | type | string | тип взаимодействия с | | | | источником | +--------------------+------------+--------------------------+ .. _post_data: POST /data ---------------------------- Запрашивает данные ресурсов в синхронном режиме .. code-block:: POST /data URL .. code-block:: http://localhost:8080/smevql/api/v1/data При запросе необходимо указать Headers: - Key: content-type - Value: application/json Тело запроса должно содержать два обязательных блока: Блок ``query`` - описание требуемых ресурсов и условий фильтрации данных; Блок ``credentials`` - общие данные запроса и информация о потребителе. Пример блока ``query``: .. code-block:: json { "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``: .. code-block:: json "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" } ] } .. table:: Параметры запроса +-------------+------------+--------------------------------------------------------------+-----------------------------+ | Параметр | Тип данных | Описание | Примечание | +=============+============+==============================================================+=============================+ | query | array | атрибут запроса данных внутри указывается название сущности, | | | | | данные которой нужно получить | | +-------------+------------+--------------------------------------------------------------+-----------------------------+ | conditions | string | указывается условие фильтрации записей (опционально) | - :ref:`conditions_rules` | | | | | | | | | | - :ref:`filter_options` | +-------------+------------+--------------------------------------------------------------+-----------------------------+ | fetch | array | опциональный блок условий | - :ref:`fetch_conditions` | +-------------+------------+--------------------------------------------------------------+-----------------------------+ | 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 | подпись (не заполняется) | | +-------------+------------+--------------------------------------------------------------+-----------------------------+ Пример запроса: .. code-block:: 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" } } }' Пример ответа: .. code-block:: { "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" } } } .. table:: Описание ответа +----------------------+------------+-----------------------------------------------------------------+ | Параметр | Тип данных | Описание | +======================+============+=================================================================+ | response | object | объект с описанием ресурсов, содержащих массивы данных запросов | +----------------------+------------+-----------------------------------------------------------------+ | resourse_data | array | массивы данных, запрашиваемых ресурсов (имя объекта) | +----------------------+------------+-----------------------------------------------------------------+ .. _conditions_rules: Правила задания условий ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Объединение условий только по **and** 2. Операции сравнения: - ``=`` (по умолчанию); - ``>``; - ``>=``; - ``<``; - ``<=``; - ``in``. 3. Условия сравнения применимы к численным типам, датам, временам и таймштампам. .. _filter_options: Варианты определения условий фильтрации ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Простое равенство .. code-block:: json { "query": { "office": { "conditions": { "phone": "(347) 246-53-00" } } } } 2. Сравнение краткое .. code-block:: json { "query": { "office": { "conditions": { "area": [">","130"] } } } } 3. Сравнение полное .. code-block:: json { "query": { "office": { "conditions": { "area": { "op": ">", "value": "130" } } } } } 4. Комплексное условие .. code-block:: json { "query": { "office": { "conditions": { "area": [">","130"], "floor": ["in", [1, 2]] } } } } В conditions СМЭВ QL запроса поддерживается возможность указывать логический ИЛИ через зарезервированное слово **or**. В блок or необходимо передать массив объектов, содержащих условия в свою очередь объединённые логическим **И (AND)**. Все условия, находящиеся на одном уровне с **or** группируются через логическое И (AND), как при обычном СМЭВ QL Запросе. Пример: .. code-block:: json "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) соберутся в следующую конструкцию: .. code-block:: sql WHERE (lastname = 'П' AND middlename = 'И' AND birthdate = '2021-11-29 00:00:00') OR (vin ='в1') OR (vin2='в2' AND model = 'bmw') .. _fetch_conditions: Подробное описание блока **fetch** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ В блоке ``conditions`` опционально можно добавить блок ``fetch``, в котором указывать: - условия сортировки (**order**); - условия выбора страниц (**page**); - условия выборки доступных для каждого ресурса событий машины состояния (**show_events**); - применение локализованных переменных (**localize**); - условия выбора версии данных на указанную дату, диапазон дат, дельту, диапазон дельт (**for_system_time**, **for_system_time_started**, **for_system_time_finished**). .. code-block:: json "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 стэйт-машины (:ref:`state_machine_map_create`) ``show_events``): .. code-block:: json "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``: .. code-block:: json "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`` можно задать массив произвольных именованных переменных. Данные переменные можно указывать в качестве критерия отбора данных для других ресурсов. При этом получение данных ресурса с критерием включающим локализованную переменную выполняется после получения данных ресурса, где эта переменная была определена. Пример определения локализованных переменных: .. code-block:: json "query": { "mdm": { "conditions": { "eduejd": "00650abd-dde7-4a3b-a44e-475285ff276f", "fetch": { "localize": [ "eduejd01", "eduejd02" ] } Пример указания локализованной переменной в качестве критерия отбора данных другого ресурса: .. code-block:: json "students_eduejd01": { "conditions": { "id": "@mdm.eduejd01", }, .. note:: Использование локализованных переменных допускается только для ресурсов, находящихся на одном уровне в запросе. Если необходимо получить данные конкретной версии (версия может характеризоваться временной отметкой или номером дельты), то в блоке ``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]``. Общие правила работы с системными параметрами: 1. СМЭВ QL фиксирует время получения запроса для подстановки в запросы к ресурсам у которых не указана отметка. 2. Указание отметок времени может быть на уровне родительского ресурса, так и на уровне вложенного ресурса. 3. При наличии отметок и на уровне родительского и на уровне вложенного ресурса, приоритет имеет более близкая к ресурсу отметка. 4. При чтении данных ресурса из нескольких источников, фильтрация на основе отметки ресурса распространяется на все таблицы. 5. Для таблиц типа стенделон и прокси Простор игнорирует конструкцию ``for system_time``. a. Для не версионированных таблиц запросы с ``for system_time as off`` возвращают актуальное значение без учета отметки b. Для не версионированных таблиц запросы с ``for system_time started/finished`` возвращают пустое множество без учета отметок диапазона 6. При наличии отметок на уровне запроса, она распространяется на все ресурсы, для которых метка не определена. 7. Совмещение в одном запросе различных режимов получения данных (добавленных и удаленных), например 1 ресурс добавленные записи, а 2 ресурс удаленные записи недопустимо, должен вернуться код 409 "Недопустимое сочетание условий выборки данных". Остальные сочетания режимов получения данных допустимы. 8. Метки времени на ресурсы сиблинги не распространяются. Примеры запросов с указанием временных меток: **получение данных офисов и кабинетов на таймштамп** .. code-block:: json { "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 дельту** .. code-block:: json { "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 дельту** .. code-block:: json { "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" ] } } } } **получение данных офисов и кабинетов удаленных за диапазон времени** .. code-block:: json { "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 дельту и всех актуальных кабинетов (сиблинг)** .. code-block:: json { "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" ] } } } GET /server/indexes/required ---------------------------------- Формирует рекомендации по индексам на основании описания моделей .. code-block:: GET /server/indexes/required URL .. code-block:: http://localhost:8080/smevql/api/v1/server/indexes/required Запрос отправляется без параметров Пример запроса: .. code-block:: curl -X 'GET' \ 'http://localhost:8080/smevql/api/v1/server/indexes/required' \ -H 'accept: application/json' Пример ответа: .. code-block:: { "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" ] } ] } } } .. table:: Описание ответа +----------------------+------------+--------------------------+ | Параметр | Тип данных | Описание | +======================+============+==========================+ | server | string | данные сервера | +----------------------+------------+--------------------------+ | mnemonic | string | мнемоника | +----------------------+------------+--------------------------+ | instance | string | экземпляр сервера | +----------------------+------------+--------------------------+ | indexes | string | данные индекса | +----------------------+------------+--------------------------+ | connections | array | массив связей | +----------------------+------------+--------------------------+ | source | string | название источника | +----------------------+------------+--------------------------+ | table | string | название таблицы | +----------------------+------------+--------------------------+ | fields | string | список полей модели | +----------------------+------------+--------------------------+ | conditions | array | массив условий | | | | фильтрации записей | +----------------------+------------+--------------------------+