feat: multi-database backup, HTTP API endpoints, admin panel UI
- backup CLI: add --all-databases, --database, --data-root flags - backup format: tar.gz with databases/<name>/ + backup.json metadata - HTTP API: new endpoints /databases, /backup, /backups, /restore - HTTP API: database switching via X-Database header - Admin panel: database selector dropdown, Databases tab, Backups tab - Admin panel: backup/restore UI with fetch() to new endpoints - Update deps: hunos 1.3.0, jwt-nim-baraba 2.1.0 - Docker: backup cron uses --all-databases --data-root=/data/databases - Docs: update api-http.md, protocol.md with correct endpoints - OpenAPI spec updated to v1.1.6 Known limitation: DELETE /databases disabled due to ORC SIGSEGV in LSMTree.close(). Use SQL DROP DATABASE instead.
This commit is contained in:
+87
-60
@@ -5,7 +5,7 @@ JSON-базиран REST API за уеб приложения.
|
||||
## Базов URL
|
||||
|
||||
```
|
||||
http://localhost:9470
|
||||
http://localhost:9912
|
||||
```
|
||||
|
||||
## Endpoints
|
||||
@@ -15,53 +15,7 @@ http://localhost:9470
|
||||
Health проверка:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/health
|
||||
```
|
||||
|
||||
### GET /ready
|
||||
|
||||
Readiness проверка:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/ready
|
||||
```
|
||||
|
||||
### POST /query
|
||||
|
||||
Изпълнение на BaraQL заявка:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/query \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"query": "SELECT * FROM users WHERE age > 18"}'
|
||||
```
|
||||
|
||||
Отговор:
|
||||
```json
|
||||
{
|
||||
"columns": ["name", "age"],
|
||||
"rows": [["Alice", 30], ["Bob", 25]],
|
||||
"row_count": 2,
|
||||
"duration_ms": 12
|
||||
}
|
||||
```
|
||||
|
||||
### POST /batch
|
||||
|
||||
Групови заявки:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/batch \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"queries": ["INSERT users { name := \"Alice\" }", "INSERT users { name := \"Bob\" }"]}'
|
||||
```
|
||||
|
||||
### GET /schema
|
||||
|
||||
Преглед на схемата:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/api/schema
|
||||
curl http://localhost:9912/health
|
||||
```
|
||||
|
||||
### GET /metrics
|
||||
@@ -69,37 +23,110 @@ curl http://localhost:9470/api/schema
|
||||
Prometheus метрики:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/metrics
|
||||
curl http://localhost:9912/metrics
|
||||
```
|
||||
|
||||
### POST /explain
|
||||
### POST /auth
|
||||
|
||||
Обяснение на план за изпълнение:
|
||||
JWT автентикация:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/explain \
|
||||
curl -X POST http://localhost:9912/auth \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username": "admin", "password": "secret"}'
|
||||
```
|
||||
|
||||
### POST /query
|
||||
|
||||
Изпълнение на SQL заявка:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9912/query \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-Database: default" \
|
||||
-d '{"query": "SELECT * FROM users WHERE age > 18"}'
|
||||
```
|
||||
|
||||
Отговор:
|
||||
```json
|
||||
{
|
||||
"columns": ["name", "age"],
|
||||
"rows": [{"name": "Alice", "age": 30}],
|
||||
"affectedRows": 0
|
||||
}
|
||||
```
|
||||
|
||||
> **Забележка:** Header `X-Database` избира към коя база данни да се изпълни заявката. Ако липсва, се използва `default`.
|
||||
|
||||
### GET /tables
|
||||
|
||||
Списък с таблици в избраната база данни:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9912/tables -H "X-Database: default"
|
||||
```
|
||||
|
||||
### GET /databases
|
||||
|
||||
Списък с налични бази данни:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9912/databases
|
||||
```
|
||||
|
||||
### POST /databases
|
||||
|
||||
Създаване на нова база данни (изисква admin права):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9912/databases \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"name": "mydb"}'
|
||||
```
|
||||
|
||||
### POST /backup
|
||||
|
||||
Създаване на backup:
|
||||
Създаване на backup (изисква admin права):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/backup \
|
||||
# Backup на всички бази данни
|
||||
curl -X POST http://localhost:9912/backup \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"destination": "/backup/snapshot.db"}'
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"all": true}'
|
||||
|
||||
# Backup на единична база
|
||||
curl -X POST http://localhost:9912/backup \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"database": "default"}'
|
||||
```
|
||||
|
||||
### GET /backups
|
||||
|
||||
Списък с налични архиви:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9912/backups -H "Authorization: Bearer <token>"
|
||||
```
|
||||
|
||||
### POST /restore
|
||||
|
||||
Възстановяване от архив (изисква admin права):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9912/restore \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"input": "backup_1234567890.tar.gz", "all": true}'
|
||||
```
|
||||
|
||||
## Грешки
|
||||
|
||||
```json
|
||||
{
|
||||
"error": {
|
||||
"code": "INVALID_QUERY",
|
||||
"message": "Грешка в синтаксиса"
|
||||
}
|
||||
"error": "Unauthorized"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -107,5 +134,5 @@ curl -X POST http://localhost:9470/api/backup \
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
http://localhost:9470/api/users
|
||||
http://localhost:9912/metrics
|
||||
```
|
||||
|
||||
+11
-1
@@ -240,9 +240,19 @@ Content-Type: application/json
|
||||
```http
|
||||
POST /backup
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer <token>
|
||||
|
||||
{
|
||||
"destination": "/backup/snapshot.db"
|
||||
"all": true
|
||||
}
|
||||
```
|
||||
|
||||
Отговор:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"output": "backup_1234567890.tar.gz",
|
||||
"message": "Backup created"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user