Перейти к основному содержимому

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.