D1 Proxy API
Прямой низкоуровневый доступ к Cloudflare D1 базам данных для администратора. Позволяет просматривать, редактировать и удалять данные во всех таблицах.
Архитектура
D1 API - это низкоуровневый прокси для работы с D1 базой, который используется в админ-панели для просмотра всех данных и выполнения произвольного SQL.
Admin UI (D1 Management Page)
|
v
/api/core/d1 (GET, POST, PATCH, DELETE)
|
v
D1Service (низкоуровневый доступ)
|
v
Cloudflare D1 (integ-db)База данных integ-db
Единая база данных содержит:
creds- таблица с секретами интеграций (колонкаintegration_nameдля фильтрации){integration}-data- таблицы данных интеграций (напримерsofa-data,rozetka-data)
API Эндпоинты
GET /api/core/d1/databases
Получить список всех доступных D1 баз.
Request:
GET /api/core/d1/databases
Authorization: Bearer <token>Response (200 OK):
{
"databases": [
{
"name": "integ-db",
"id": "d1-id-123"
}
]
}GET /api/core/d1/:database/tables
Получить список всех таблиц в базе.
Parameters:
:database- Название базы (integ-db)
Request:
GET /api/core/d1/integ-db/tables
Authorization: Bearer <token>Response (200 OK):
{
"tables": ["creds", "sofa-data", "rozetka-data"]
}GET /api/core/d1/:database/tables/:table
Получить схему таблицы (структуру колонок).
Parameters:
:database- Название базы:table- Название таблицы
Request:
GET /api/core/d1/integ-db/tables/sofa-data
Authorization: Bearer <token>Response (200 OK):
{
"schema": [
{
"name": "id",
"type": "TEXT",
"notnull": 1,
"pk": 1
},
{
"name": "email",
"type": "TEXT",
"notnull": 1,
"pk": 0
}
]
}GET /api/core/d1/:database/tables/:table/rows
Получить строки из таблицы с пагинацией.
Parameters:
:database- Название базы:table- Название таблицы
Query Parameters:
limit(optional) - Количество строк (по умолчанию 50)offset(optional) - Смещение (по умолчанию 0)
Request:
GET /api/core/d1/integ-db/tables/sofa-data/rows?limit=10&offset=0
Authorization: Bearer <token>Response (200 OK):
{
"rows": [
{
"id": "1",
"email": "user@example.com",
"created_at": "2024-01-01T00:00:00.000Z"
}
]
}POST /api/core/d1/:database/tables/:table/rows
Вставить новую строку.
Parameters:
:database- Название базы:table- Название таблицы
Request:
POST /api/core/d1/integ-db/tables/sofa-data/rows
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "New Record"
}Response (201 Created):
{
"id": "new-uuid",
"name": "New Record"
}PATCH /api/core/d1/:database/tables/:table/rows/:id
Обновить строку.
Parameters:
:database- Название базы:table- Название таблицы:id- ID строки
Request:
PATCH /api/core/d1/integ-db/tables/sofa-data/rows/record-uuid
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Updated Record"
}Response (200 OK):
{
"id": "record-uuid",
"name": "Updated Record"
}DELETE /api/core/d1/:database/tables/:table/rows/:id
Удалить строку.
Parameters:
:database- Название базы:table- Название таблицы:id- ID строки
Request:
DELETE /api/core/d1/integ-db/tables/sofa-data/rows/record-uuid
Authorization: Bearer <token>Response (200 OK):
{
"success": true
}POST /api/core/d1/:database/query
Выполнить произвольный SQL запрос.
Parameters:
:database- Название базы
Request:
POST /api/core/d1/integ-db/query
Authorization: Bearer <token>
Content-Type: application/json
{
"sql": "SELECT * FROM creds WHERE integration_name = ? LIMIT 10",
"params": ["sofa"]
}Response (200 OK):
{
"data": [
{
"id": "1",
"email": "user@example.com"
}
]
}Пример использования
import axios from "axios";
const api = axios.create({
baseURL: "http://localhost:3000/api",
headers: {
Authorization: `Bearer ${token}`
}
});
async function manageD1() {
// 1. Получить список баз
const { data: databases } = await api.get("/core/d1/databases");
console.log("Databases:", databases);
// 2. Получить список таблиц
const { data: tables } = await api.get("/core/d1/integ-db/tables");
console.log("Tables:", tables);
// 3. Получить схему таблицы
const { data: schema } = await api.get("/core/d1/integ-db/tables/sofa-data");
console.log("Schema:", schema);
// 4. Получить строки
const { data: rows } = await api.get("/core/d1/integ-db/tables/sofa-data/rows?limit=10");
console.log("Rows:", rows);
// 5. Вставить новую строку
const { data: newRow } = await api.post("/core/d1/integ-db/tables/sofa-data/rows", {
name: "New Record"
});
console.log("Created:", newRow);
// 6. Обновить строку
const { data: updated } = await api.patch(`/core/d1/integ-db/tables/sofa-data/rows/${newRow.id}`, {
name: "Updated Record"
});
console.log("Updated:", updated);
// 7. Выполнить SQL запрос
const { data: queryResult } = await api.post("/core/d1/integ-db/query", {
sql: "SELECT COUNT(*) as count FROM creds WHERE integration_name = ?",
params: ["sofa"]
});
console.log("Query result:", queryResult);
// 8. Удалить строку
await api.delete(`/core/d1/integ-db/tables/sofa-data/rows/${newRow.id}`);
console.log("Deleted");
}Дополнительно
- KV Proxy API - Прямой доступ к KV
- Cache API - Управление KV (высокоуровневый)
- Secrets API - Управление секретами