POST /api/v1/db/query

Параметризованный CRUD.

Base URL: https://<host>/ (пример: http://localhost:5000). Соглашения, обзор Public API, Swagger UI.

Тело запроса:

ПолеТипОбяз.Описание
entitystringда*Имя сущности (таблицы); должна быть в whitelist ключа
actionstringда*select, insert, update, delete
fieldsstring[]нетПоля для select
filtersobject[]нетФильтры [{field, op, value}]
dataobjectнетДанные для insert/update
limitintнетdefault 100 (select)
offsetintнетdefault 0 (select)
sortobject[]нетСортировка
transaction_idstringнетID активной транзакции

*Обязательны entity + action. Поле query (legacy SQL) возвращает 403. Запрос с неразрешённой сущностью — 403.

Пример — select:

{
  "entity": "products",
  "action": "select",
  "fields": ["id", "name", "price"],
  "filters": [{ "field": "status", "op": "eq", "value": "active" }],
  "limit": 50,
  "offset": 0,
  "sort": [{ "field": "created_at", "direction": "desc" }]
}

Пример — insert:

{
  "entity": "orders",
  "action": "insert",
  "data": { "user_id": 42, "total": 199.99 }
}

Ответы:

КодОписание
200{ "success": true, ...result }
400Ошибка выполнения / валидации
401Нет/неверный API key
403Raw SQL отключён

Заголовки запроса

ЗаголовокОбяз.Описание
X-API-KeyдаКлюч с scope db:query
Content-Typeдаapplication/json

Минимальный пример запроса

{
  "entity": "products",
  "action": "select",
  "fields": ["id", "name"],
  "limit": 10
}

Пример успешного ответа

{
  "success": true,
  "data": {
    "rows": [
      { "id": 1, "name": "Item A" }
    ],
    "count": 1
  }
}

Пример ошибки

{
  "success": false,
  "error": {
    "code": "forbidden",
    "message": "Entity not allowed for this API key"
  }
}

Пример curl

curl -X POST http://localhost:5000/api/v1/db/query \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"entity":"products","action":"select","fields":["id","name"],"limit":10}'

См. также: Tx flow.