Перейти к содержанию

HTTP API

Все адреса ниже относятся к адресу вашего кабинета, например https://data.example.com. Пользовательский access token выдаёт локальный Keycloak. Запросы проходят через KrakenD и HTTP/gRPC gateway; права и SQL проверяет Go core.

Настройки пула PostgreSQL

Только роль system.admin может вызвать GET /v1/settings/database-pool и PUT /v1/settings/database-pool. Ответ включает настройки и текущие показатели open_connections, in_use_connections, idle_connections, wait_count, wait_duration_milliseconds. Изменение принимается полным JSON:

{"max_open_connections":20,"max_idle_connections":5,"connection_max_lifetime_seconds":1800,"connection_max_idle_seconds":300}

Лимиты применяются к Go core сразу, хранятся только в клиентском контуре и после перезапуска имеют приоритет над начальными переменными .env. Допустимы 1–100 открытых соединений, 1–100 свободных (не больше общего лимита), срок жизни 60–86400 секунд и простой 10–86400 секунд.

Настройки Go ELT worker

Роль system.admin может вызвать GET /v1/settings/worker и PUT /v1/settings/worker с полным JSON:

{"enabled":true,"concurrency":2,"interval_seconds":5}

Ответ также включает active_workers, completed_batches, last_heartbeat и last_error. Допустимы 1–32 горутины и интервал 1–300 секунд. Остановка через enabled:false отменяет текущие обработчики по Go context; клиентский обработчик обязан корректно завершать свою транзакцию при отмене. Настройки сохраняются только в локальном контуре. Worker читает их и сообщает состояние через внутренний gRPC с отдельным сервисным токеном; публичного маршрута для этого нет.

Каталог

Метод Путь Назначение
GET /v1/catalog Все разрешённые наборы и колонки
GET /v1/schemas Список доступных схем
GET /v1/schemas/{schema}/datasets Таблицы и представления схемы
GET /v1/datasets/{schema}/{name}/_mapping Поля, SQL-типы и nullable
GET /v1/datasets/{schema}/{name}/rows?limit=25 Просмотр первых строк
PUT /v1/datasets/{schema}/{name}/columns/{column}/label Изменить подпись колонки; только system.admin

Обычный пользователь видит набор только при наличии catalog.list и dataset.read.<schema>.<name>. Системный администратор видит все клиентские наборы.

Каталог и _mapping возвращают label у набора и колонок и schemaLabel у схемы. Это подписи из PostgreSQL COMMENT. Они могут быть пустыми, если разработчик клиентской структуры их не задал. Для путей, фильтров, сортировки и ключей ответа используйте технические поля schema, name и columns[].name, а не подписи.

Системный администратор меняет подпись существующей колонки запросом PUT с телом {"label":"Дата продажи"}. Пустая строка удаляет комментарий и возвращает запасную подпись из технического имени. Максимум — 120 символов без управляющих знаков. Техническое имя, SQL-тип и права доступа не меняются. Изменение сохраняется в PostgreSQL этого клиента; чтобы оно сохранилось при создании новой установки, внесите ту же подпись в миграцию клиентского пакета.

Поиск и подсчёт

POST /v1/datasets/{schema}/{name}/_search принимает ограниченный JSON DSL:

{
  "query": {"bool": {"filter": [
    {"term": {"product": "Coffee"}},
    {"range": {"amount_cents": {"gte": 500}}}
  ]}},
  "sort": [{"id": "asc"}],
  "fields": ["id", "product", "amount_cents"],
  "from": 0,
  "size": 25
}

Пример вызова с вашим токеном:

curl -X POST 'https://data.example.com/v1/datasets/public/demo_sales/_search' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"query":{"match_all":{}},"size":10}'

Имя demo_sales здесь только пример: используйте набор из собственного каталога. Ответ содержит total и hits[]._source. Необязательный fields выбирает колонки _source; без него возвращаются все. Направление сортировки — asc или desc, колонку сортировки можно не включать в fields. POST .../_count принимает query и возвращает count без строк.

Поддерживаются match_all, term, terms, range, exists, match, bool. Размер тела до 8 KiB, size от 1 до 100, from + size не больше 1000, SQL timeout пять секунд. API читает данные; произвольный SQL и запись строк не предусмотрены. Этот DSL похож на Elasticsearch по форме, но не является совместимым API.