API 路由架构

路由结构

路由 方法 功能 权限
/api/init/* GET/POST 初始化 公开
/api/auth/* POST/GET 认证相关 公开 / authMiddleware
/api/auth/webauthn/* POST/DELETE WebAuthn 公开 / authMiddleware
/api/users/* GET/POST/PUT/DELETE 用户管理 authMiddleware + adminOnly
/api/teams/* GET/POST/PUT/DELETE 团队管理 authMiddleware
/api/accounts/* GET/POST/PUT/DELETE DNS 账号管理 authMiddleware + adminOnly(管理)
/api/providers/* GET DNS 提供商 authMiddleware
/api/domains/* GET/POST/PUT/DELETE 域名管理 authMiddleware
/api/domains/email-templates/* GET/POST/PUT/DELETE 邮件模板管理 authMiddleware
/api/domains/:id/records/* GET/POST/PUT/DELETE 解析记录管理 authMiddleware
/api/domains/:id/failover/* GET/POST/PUT/DELETE 故障转移配置 authMiddleware
/api/rdap/* GET RDAP 查询 公开
/api/ns-monitor/* GET/POST/PUT/DELETE NS 监测 authMiddleware
/api/network/* GET/POST 网络工具 authMiddleware
/api/audit/* GET 审计日志 authMiddleware + adminOnly + noTokenAuth
/api/system/* GET 系统信息 公开
/api/settings/* GET/PUT/POST 系统设置 authMiddleware + noTokenAuth + adminOnly
/api/security/* GET/POST 安全设置 authMiddleware + noTokenAuth + adminOnly
/api/tokens/* GET/POST/PATCH/DELETE API Token authMiddleware + noTokenAuth
/api/tunnels/* GET/POST/PUT/DELETE 隧道管理 authMiddleware
/api/logs GET 操作日志 authMiddleware + adminOnly

认证路由 (/api/auth)

公开端点

需要认证

用户管理路由 (/api/users)

团队管理路由 (/api/teams)

DNS 账号路由 (/api/accounts)

需认证,管理员可管理所有账号,普通用户只能访问自己的账号。

域名路由 (/api/domains)

审计日志路由 (/api/audit)

需认证,仅管理员可访问(authMiddleware + adminOnly + noTokenAuth)。

RDAP 查询路由 (/api/rdap)

无需认证,公开查询,符合 RFC 7483 标准。

网络路由 (/api/network)

需认证,代理配置管理和网络连通性检测。

NS 监测路由 (/api/ns-monitor)

需认证,DNS NS 记录监测与告警。

DNS 提供商路由 (/api/providers)

需认证,DNS 提供商图标和续期域名查询。

操作日志路由 (/api/logs)

系统信息路由 (/api/system)

设置路由 (/api/settings)

需认证,仅管理员可访问(authMiddleware + noTokenAuth + adminOnly)。

安全路由 (/api/security)

需认证,个人安全设置与管理员安全策略管理。

API Token 路由 (/api/tokens)

需认证,禁止 API Token 访问(authMiddleware + noTokenAuth)。

隧道路由 (/api/tunnels)

需认证,Cloudflare 隧道管理。

初始化路由 (/api/init)

公开端点,系统首次启动时使用,不受初始化检查限制。

数据库调用规范

✅ 正确用法

import { query, get, execute, insert, UserOperations } from '../db';

const user = await get<User>('SELECT * FROM users WHERE id = ?', [userId]);
const users = await query<User>('SELECT * FROM users WHERE status = ?', ['active']);
const id = await insert('INSERT INTO users (name, email) VALUES (?, ?)', [name, email]);

❌ 错误用法

// 禁止直接使用兼容层
import { getAdapter } from '../db/adapter';  // 已废除
const db = getAdapter();