KOOB API
KOOB API предназначен для выполнения запросов в кубы и получения данных из кубов. Также можно получить описания справочников, уникальные значения, другие агрегаты и информацию, которую можно было бы получить с помощью SQL запроса SELECT
.
Получение мета-информации
GET /api/v3/koob/{ds}
Используется для запроса за метаинформацией о кубах, досутпных в указанном источнике данных. Может быть использован только для глобальных кубов.
Пример запроса
curl 'http://${luxmsbi_url}/api/v3/koob/${ds_id}' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
- ds_id - идентификатор источника данных
Структура ответа
[
{
"id": "luxmsbi.example_koob",
"name": "example_koob",
"title": "example_koob",
"config": {...},
"measures": [{...}],
"cube_name": "example_koob",
"sql_query": "select * from example_table",
"dimensions": [{...}],
"source_ident": "luxmsbi"
},
...
]
GET /api/v3/koob/{ds}.{cube}
Используется для запроса за метаинформацией о кубе, идентификатор которого используется в запросе.
Может быть использован только для глобальных кубов.
Пример запроса
curl 'http://${luxmsbi_url}/api/v3/koob/${ds_id}${koob_id}' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
- ds_id - идентификатор источника данных
- koob_id - идентификатор куба
Структура ответа
{
"id": "luxmsbi.example_koob",
"name": "example_koob",
"title": "example_koob",
"config": {...},
"measures": [{...}],
"sql_query": "select * from example_table",
"dimensions": [{...}],
"source_ident": "luxmsbi"
}
GET /api/v3/koob/{ds}.{cube}.{column}
Используется для запроса за метаинформацией о размерности, идентификатор которой используется в запросе.
Может быть использован только для глобальных кубов.
Пример запроса
curl 'http://${luxmsbi_url}/api/v3/koob/${ds_id}.${koob_id}.${dim_id}' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
- ds_id - идентификатор источника данных
- koob_id - идентификатор куба,
- dim_id - идентификатор размерности
Структура ответа
В случае , если запрашивается информация о размерности тип которой STRING
, то в ключе values
содержатся все уникальные значения для этого поля
{
"id": "example_dim",
"sql": "example_col_name",
"name": "example_dim",
"type": "STRING",
"title": "example_dim",
"config": {
"possible_aggregations": [...]
},
"cubeId": "example_koob",
"values": ["..."]
}
Если запрашивается информация о размерности тип которой NUMBER
,PERIOD
или SUM
, то в ключах min
, max
содержатся минимальное и максимальное значение для этого поля.
{
"id": "example_dim",
"max": 19,
"min": 1,
"sql": "example_col_name",
"name": "example_dim",
"type": "SUM",
"title": "example_dim",
"config": {
"possible_aggregations": [
"count",
"avg",
"sum",
"min",
"max"
]
},
"cubeId": "example_koob"
}
Получение данных
POST /api/v3/{dataset}/data
Используется для запроса за данными с использованием глобальных или атласных кубов.
При использовании глобального куба используется следующий URL:
http(s)://${luxmsbi_url}/api/v3/koob/data
При использовании атласного куба используется следующий URL:
http(s)://${luxmsbi_url}/api/v3/${atlas}/data
- atlas - название атласа
Пример запроса в глобальный куб
curl 'http://${luxmsbi_url}/api/v3/koob/data' \
-H 'Content-Type: application/json' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
--data-raw '{"with":""luxmsbi.public_hr_indicators1","columns":["count(distinct(degree))"],"options":["!MemberAll","!ParallelHierarchyFilters"]}' \
Пример запроса в локальный куб
curl 'http://${luxmsbi_url}/api/v3/${atlas}/data' \
-H 'Content-Type: application/json' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
--data-raw '{"with":""luxmsbi.public_hr_indicators1","columns":["count(distinct(degree))"],"options":["!MemberAll","!ParallelHierarchyFilters"]}' \
Пример тела запроса
В теле запроса указывается:
- имя куба;
- список столбцов, которые нужно включить в ответ;
- параметры сортировки;
- фильтры для сырых данных;
- фильтры для агрегированных данных;
- параметры для расчёта подытогов.
{ "with":"czt.fot",
"sort": ["-dor1","val1"],
"filters": {
"dor1": ["=", "ГОРЬК"],
"dor2": ["=", "ПОДГОРЬК"],
"dor4": ["=", null],
"dor5": ["=", null],
"Пол": ["or", ["!="], ["ilike", "Муж"]],
"dt": ["between", "2020-01", "2020-12"],
"sex_name": ["=", "Мужской"],
"": [">", ["+",["col1", "col2"]], 100]
},
"having": {
"dt": [">","2020-08"],
},
"subtotals": ["dor3","-dor4"],
"columns": ["dor3", "czt.fot.dor4", "fot.dor5", 'sum((val3+val1)/100):summa', {"new":"old"}, ["sum", ["column","val2"]], {"new": ["avg", ["+",["column","val2"],["column","val3"]]]} ]]
}
Структура ответа
{
"col_1": "text_data",
"col_2": 1,
"col_3": "01/01/2023"
}
POST /api/v3/{dataset}/count
Используется для запроса за количеством уникальных записей по конкретному полю(-ям) с использованием глобальных или атласных кубов.
При использовании глобального куба используется следующий URL:
http(s)://${luxmsbi_url}/api/v3/koob/count
При использовании атласного куба используется следующий URL:
http(s)://${luxmsbi_url}/api/v3/${atlas}/count
- atlas - название атласа
Пример запроса в глобальный куб
curl 'http://${luxmsbi_url}/api/v3/koob/data' \
-H 'Content-Type: application/json' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
--data-raw '{"with":""luxmsbi.example_koob","columns":["col_1"]}' \
Пример запроса в атласный куб
curl 'http://${luxmsbi_url}/api/v3/${atlas}/data' \
-H 'Content-Type: application/json' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
--data-raw '{"with":""luxmsbi.example_koob","columns":["col_1"]}' \
Пример ответа
{
"count": 9
}
При указании ключа distinct
в теле запроса, в ответе возвращается количество уникальных записей. Значением ключа может быть любое значение, интерпретируемое как true
. Клиентская часть Luxms BI использует значение пустого массива []
.
Пример запроса с указанием distinct
curl 'http://${luxmsbi_url}/api/v3/koob/data' \
-H 'Content-Type: application/json' \
-H 'Cookie: LuxmsBI-User-Session=${luxmsbi_cookie}' \
--data-raw '{"with":""luxmsbi.example_koob","columns":["col_1","col_2","col_3"], "distinct":[]}'
Запись данных в Куб (writeback)
Для добавления, изменения или удаления записей из Куба можно воспользоваться POST запросом в следующем формате:
/api/v3/writeback/batch/:dataset/:datasource.:cube
Тело запроса может содержать следующий JSON:
[
{"insert": { "key1": "aa1", "key2": "bb1", "field1": "111" } },
{"update": { "key1": "aa2", "key2": "bb2", "field1": "222" } },
{"delete": { "key1": "aa3", "key2": "bb3", "field1": "333" } }
]
Для того, чтобы данная функциональность сработала поле config соответствующего Куба должно содержать следующие настройки, описывающие таблицу, в которой требуется внести изменения:
{
table: "table_name",
schema: "schema_name",
primary_key: [
"key1",
"key2",
],
}
Пример запроса:
curl --location --request POST 'https://${luxmsbi_url}/api/v3/writeback/batch/ds_demo171/luxmsbi._orders_details' \
--header 'Authorization: Bearer eyJhbGciOiJIUzIXXXXX' \
--header 'Content-Type: application/json' \
--data-raw '[ {"update": { "orderid": "10343", "productid": "76", "unitprice": "3903" } } ]'
В случае успешно выполненной операции в результате вернется ответ с HTTP статус 200 и телом ответа в формате:
[
{"count": [N1], "insert": { "key1": "aa1", "key2": "bb1", "field1": "111" } },
{"count": [N2], "update": { "key1": "aa2", "key2": "bb2", "field1": "222" } },
{"count": [N3], "delete": { "key1": "aa3", "key2": "bb3", "field1": "333" } }
]
где N1,N2,N3 - количество вставленных, измнененных или удаленных записей соответственною
В случае ошибки в ответ вернется HTTP статус 400 и описанием ошибки в теле ответа.
Для выполнения операции через Token требуется его создать в разделе API токены с правами на указанный URL.