286 lines
8.0 KiB
Markdown
286 lines
8.0 KiB
Markdown
# Domainflare HTTP API 调用文档
|
||
|
||
本文描述已部署的 **Domainflare**(Cloudflare Worker)对外 HTTP 接口。文中 **BASE** 表示 Worker 的**根 URL**(协议 + 主机,**无末尾斜杠**),例如 `https://domainflare.example.workers.dev`。
|
||
|
||
**相关文件**(仓库根目录):
|
||
|
||
| 文件 | 用途 |
|
||
|------|------|
|
||
| `imports/Domainflare.environment.postman.json` | 环境变量模板(`BASE`、`PANEL_TOKEN` 等),Postman / Apifox 可导入 |
|
||
| `imports/Domainflare.postman_collection.json` | Postman 集合 |
|
||
| `imports/Domainflare.apifox.openapi.json` | OpenAPI 3.0,供 Apifox 等导入 |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
- [0. Postman / Apifox 与环境变量](#0-postman--apifox-与环境变量)
|
||
- [1. 快速发现](#1-快速发现)
|
||
- [2. 认证方式](#2-认证方式)
|
||
- [3. 管理接口](#3-管理接口)
|
||
- [4. Cloudflare API 透传](#4-cloudflare-api-透传)
|
||
- [5. 错误响应](#5-错误响应)
|
||
- [6. CORS](#6-cors)
|
||
- [7. 集成建议](#7-集成建议)
|
||
- [8. 安全提示](#8-安全提示)
|
||
|
||
---
|
||
|
||
## 0. Postman / Apifox 与环境变量
|
||
|
||
建议在 Shell、CI 或 API 工具中使用**同名**变量,便于对照:
|
||
|
||
```bash
|
||
export BASE="https://你的 Worker 域名" # 无末尾 /
|
||
export PANEL_TOKEN="你的 APP_ACCESS_TOKEN" # 与 Worker 的 APP_ACCESS_TOKEN 一致
|
||
# 调用 /api/cf/* 时还需要 Cloudflare API Token,文档示例里用 CF_TOKEN;导入环境文件里对应键名为 cfToken,含义相同。
|
||
```
|
||
|
||
**导入步骤概要**
|
||
|
||
1. **环境**:导入 `imports/Domainflare.environment.postman.json`(Postman:`导入` →选择环境文件;Apifox:`导入` → `Postman` → 选同一文件)。按实际修改 `BASE`、`PANEL_TOKEN`。
|
||
2. **Postman**:再导入 `imports/Domainflare.postman_collection.json`;选中上述环境后请求中 `{{BASE}}`、`{{PANEL_TOKEN}}` 会生效。
|
||
3. **Apifox**:在环境就绪后,`导入` → `OpenAPI` → 选择 `imports/Domainflare.apifox.openapi.json`(服务地址模板为 `{BASE}`,需在环境中定义 `BASE`)。在认证方案中:`PanelHeader` / `PanelBearer` 使用 `{{PANEL_TOKEN}}`,`CfBearer` 使用 `{{cfToken}}`。
|
||
|
||
---
|
||
|
||
## 1. 快速发现
|
||
|
||
| 方法 | 路径 | 鉴权 | 说明 |
|
||
|------|------|:----:|------|
|
||
| GET | `/api` | 否 | 返回 API 目录 JSON(`service`、`version`、路由说明等) |
|
||
| GET | `/api/health` | 否 | 健康检查,可用于探活 |
|
||
|
||
示例:
|
||
|
||
```bash
|
||
curl -sS "https://你的 Worker 域名/api/health"
|
||
```
|
||
|
||
使用环境变量时:
|
||
|
||
```bash
|
||
curl -sS "$BASE/api/health"
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 认证方式
|
||
|
||
Worker 配置项 **`APP_ACCESS_TOKEN`**(面板口令)用于保护需鉴权的管理接口。
|
||
|
||
### 2.1 管理类接口(校验、账号 CRUD)
|
||
|
||
以下**二选一**即可(勿在同一条请求里混用两种含义的 Bearer,见下节):
|
||
|
||
| 方式 | 请求头 |
|
||
|------|--------|
|
||
| A | `X-App-Token: <APP_ACCESS_TOKEN>` |
|
||
| B | `Authorization: Bearer <APP_ACCESS_TOKEN>` |
|
||
|
||
适用于:`GET /api/verify`,`GET/POST/PATCH/DELETE /api/accounts` 等。
|
||
|
||
### 2.2 Cloudflare API 透传(`/api/cf/*`)
|
||
|
||
须**同时**携带:
|
||
|
||
| 请求头 | 值 |
|
||
|--------|-----|
|
||
| `X-App-Token` | `<APP_ACCESS_TOKEN>`(**仅**用此头传面板口令,避免与 CF 的 Bearer 冲突) |
|
||
| `Authorization` | `Bearer <Cloudflare API Token>` |
|
||
|
||
转发规则:请求 `BASE` + `/api/cf` + 子路径与查询串 → `https://api.cloudflare.com/client/v4` + 同一子路径与查询串。HTTP 方法及 Body(如 JSON)原样转发,响应状态码与正文与官方 API 一致。
|
||
|
||
---
|
||
|
||
## 3. 管理接口
|
||
|
||
以下示例假定已设置 `BASE`、`PANEL_TOKEN`(见第 0 节)。
|
||
|
||
### 3.1 校验面板口令
|
||
|
||
```http
|
||
GET /api/verify
|
||
```
|
||
|
||
| 结果 | HTTP | 响应体(示例) |
|
||
|------|------|----------------|
|
||
| 成功 | 200 | `{"ok":true}` |
|
||
| 失败 | 401 | `{"success":false,"errors":[{"message":"Invalid app access token"}]}` |
|
||
|
||
```bash
|
||
curl -sS -H "X-App-Token: $PANEL_TOKEN" "$BASE/api/verify"
|
||
curl -sS -H "Authorization: Bearer $PANEL_TOKEN" "$BASE/api/verify"
|
||
```
|
||
|
||
### 3.2 列出已保存的 Cloudflare 账号
|
||
|
||
```http
|
||
GET /api/accounts
|
||
```
|
||
|
||
**响应示例:**
|
||
|
||
```json
|
||
{
|
||
"accounts": [
|
||
{
|
||
"id": "uuid",
|
||
"name": "显示名",
|
||
"token": "Cloudflare API Token 全文",
|
||
"created_at": 1712345678
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
> 响应含**完整** CF Token,仅允许在可信网络与可信客户端使用。
|
||
|
||
```bash
|
||
curl -sS -H "Authorization: Bearer $PANEL_TOKEN" "$BASE/api/accounts"
|
||
```
|
||
|
||
### 3.3 新增账号
|
||
|
||
```http
|
||
POST /api/accounts
|
||
Content-Type: application/json
|
||
```
|
||
|
||
```json
|
||
{
|
||
"name": "我的账号",
|
||
"token": "Cloudflare API Token"
|
||
}
|
||
```
|
||
|
||
- `name`:可选;`token`:**必填**。
|
||
- **成功**:`201`,响应体为 `{"account":{...}}`。
|
||
|
||
```bash
|
||
curl -sS -X POST "$BASE/api/accounts" \
|
||
-H "Authorization: Bearer $PANEL_TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"name":"生产","token":"YOUR_CF_API_TOKEN"}'
|
||
```
|
||
|
||
### 3.4 更新账号
|
||
|
||
```http
|
||
PATCH /api/accounts/:id
|
||
Content-Type: application/json
|
||
```
|
||
|
||
```json
|
||
{ "name": "新名称", "token": "新 Token" }
|
||
```
|
||
|
||
字段可选;未出现的字段保持不变。成功:`200`,`{"account":{...}}`。
|
||
|
||
```bash
|
||
curl -sS -X PATCH "$BASE/api/accounts/ACCOUNT_ID" \
|
||
-H "X-App-Token: $PANEL_TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"name":"新名称"}'
|
||
```
|
||
|
||
### 3.5 删除账号
|
||
|
||
```http
|
||
DELETE /api/accounts/:id
|
||
```
|
||
|
||
成功:`200`,`{"ok":true}`。
|
||
|
||
```bash
|
||
curl -sS -X DELETE "$BASE/api/accounts/ACCOUNT_ID" \
|
||
-H "X-App-Token: $PANEL_TOKEN"
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Cloudflare API 透传
|
||
|
||
本节对应 Worker 路径前缀 **`/api/cf/*`**,转发至 `https://api.cloudflare.com/client/v4/*`。
|
||
|
||
### 4.1 路径映射示例
|
||
|
||
| 客户端请求 | 等价 Cloudflare 端点 |
|
||
|------------|----------------------|
|
||
| `GET $BASE/api/cf/zones` | `GET https://api.cloudflare.com/client/v4/zones` |
|
||
| `GET $BASE/api/cf/zones/{zone_id}/dns_records` | `GET .../client/v4/zones/{zone_id}/dns_records` |
|
||
|
||
### 4.2 列出 Zones
|
||
|
||
```bash
|
||
export CF_TOKEN="你的 Cloudflare API Token"
|
||
|
||
curl -sS "$BASE/api/cf/zones?per_page=50&direction=desc" \
|
||
-H "X-App-Token: $PANEL_TOKEN" \
|
||
-H "Authorization: Bearer $CF_TOKEN"
|
||
```
|
||
|
||
### 4.3 列出 DNS 记录
|
||
|
||
将 `ZONE_ID` 换为实际 Zone ID:
|
||
|
||
```bash
|
||
curl -sS "$BASE/api/cf/zones/ZONE_ID/dns_records?per_page=100&page=1" \
|
||
-H "X-App-Token: $PANEL_TOKEN" \
|
||
-H "Authorization: Bearer $CF_TOKEN"
|
||
```
|
||
|
||
### 4.4 创建 DNS 记录
|
||
|
||
```bash
|
||
curl -sS -X POST "$BASE/api/cf/zones/ZONE_ID/dns_records" \
|
||
-H "X-App-Token: $PANEL_TOKEN" \
|
||
-H "Authorization: Bearer $CF_TOKEN" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"type":"A","name":"www","content":"192.0.2.1","ttl":1,"proxied":true}'
|
||
```
|
||
|
||
### 4.5 官方参考
|
||
|
||
路径、字段与错误码以 Cloudflare 为准:
|
||
[Cloudflare API v4 Documentation](https://developers.cloudflare.com/api/)
|
||
|
||
---
|
||
|
||
## 5. 错误响应
|
||
|
||
面板侧校验失败通常返回:
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"errors": [{ "message": "说明文字" }]
|
||
}
|
||
```
|
||
|
||
常见 HTTP 状态:`401`(面板口令错误)、`400`(如 `/api/cf/*` 未带 CF Bearer)。
|
||
经透传返回的响应可能与 Cloudflare 官方错误结构一致,不一定包含 `success` 字段。
|
||
|
||
---
|
||
|
||
## 6. CORS
|
||
|
||
`/api/*` 已配置 `Access-Control-Allow-Origin: *`,浏览器跨域可调用;令牌仍须保密,勿写入前端公开代码或日志。
|
||
|
||
---
|
||
|
||
## 7. 集成建议
|
||
|
||
1. 在密钥管理或 CI 中保存 `BASE`、`PANEL_TOKEN`;调用 `/api/cf/*` 时再提供 `CF_TOKEN`(或先 `GET /api/accounts` 取用已存 Token,注意泄漏风险)。
|
||
2. 启动或定时执行 `GET $BASE/api/health` 做探活。
|
||
3. 可用 `GET $BASE/api` 获取机器可读目录与 `version`,便于对接升级。
|
||
4. 所有 DNS 变更走 `/api/cf/...`,路径与官方 v4 一一对应。
|
||
|
||
---
|
||
|
||
## 8. 安全提示
|
||
|
||
- 生产环境对 `APP_ACCESS_TOKEN` 使用强随机值,推荐使用 `wrangler secret put APP_ACCESS_TOKEN`,勿将明文口令提交到公开仓库。
|
||
- `GET /api/accounts` 返回明文 CF Token,勿记录到公开日志或通过不可信代理。
|
||
- CF API Token 遵守最小权限;面板口令与 CF Token 应保存在不同轮转策略的凭据系统中。
|