Skip to content

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:

http
GET /api/core/d1/databases
Authorization: Bearer <token>

Response (200 OK):

json
{
	"databases": [
		{
			"name": "integ-db",
			"id": "d1-id-123"
		}
	]
}

GET /api/core/d1/:database/tables

Получить список всех таблиц в базе.

Parameters:

  • :database - Название базы (integ-db)

Request:

http
GET /api/core/d1/integ-db/tables
Authorization: Bearer <token>

Response (200 OK):

json
{
	"tables": ["creds", "sofa-data", "rozetka-data"]
}

GET /api/core/d1/:database/tables/:table

Получить схему таблицы (структуру колонок).

Parameters:

  • :database - Название базы
  • :table - Название таблицы

Request:

http
GET /api/core/d1/integ-db/tables/sofa-data
Authorization: Bearer <token>

Response (200 OK):

json
{
	"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:

http
GET /api/core/d1/integ-db/tables/sofa-data/rows?limit=10&offset=0
Authorization: Bearer <token>

Response (200 OK):

json
{
	"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:

http
POST /api/core/d1/integ-db/tables/sofa-data/rows
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "New Record"
}

Response (201 Created):

json
{
	"id": "new-uuid",
	"name": "New Record"
}

PATCH /api/core/d1/:database/tables/:table/rows/:id

Обновить строку.

Parameters:

  • :database - Название базы
  • :table - Название таблицы
  • :id - ID строки

Request:

http
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):

json
{
	"id": "record-uuid",
	"name": "Updated Record"
}

DELETE /api/core/d1/:database/tables/:table/rows/:id

Удалить строку.

Parameters:

  • :database - Название базы
  • :table - Название таблицы
  • :id - ID строки

Request:

http
DELETE /api/core/d1/integ-db/tables/sofa-data/rows/record-uuid
Authorization: Bearer <token>

Response (200 OK):

json
{
	"success": true
}

POST /api/core/d1/:database/query

Выполнить произвольный SQL запрос.

Parameters:

  • :database - Название базы

Request:

http
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):

json
{
	"data": [
		{
			"id": "1",
			"email": "user@example.com"
		}
	]
}

Пример использования

typescript
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 - Управление секретами