Параметризованный CRUD.
Base URL: https://<host>/ (пример: http://localhost:5000). Соглашения, обзор Public API, Swagger UI.
Тело запроса:
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
entity | string | да* | Имя сущности (таблицы); должна быть в whitelist ключа |
action | string | да* | select, insert, update, delete |
fields | string[] | нет | Поля для select |
filters | object[] | нет | Фильтры [{field, op, value}] |
data | object | нет | Данные для insert/update |
limit | int | нет | default 100 (select) |
offset | int | нет | default 0 (select) |
sort | object[] | нет | Сортировка |
transaction_id | string | нет | 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 |
| 403 | Raw 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 -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.