641 lines
11 KiB
Markdown
641 lines
11 KiB
Markdown
|
|
# API接口完整文档 - Soul创业实验项目
|
|||
|
|
|
|||
|
|
> **API风格**: RESTful | **版本**: v1.0 | **基础路径**: `/api`
|
|||
|
|
> **说明**:本文档已整合原《API接口》内容,为项目唯一 API 参考。
|
|||
|
|
|
|||
|
|
**我是卡若。**
|
|||
|
|
|
|||
|
|
接口设计原则:**简单、清晰、易用**。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 接口总览
|
|||
|
|
|
|||
|
|
### 1.1 接口分类
|
|||
|
|
|
|||
|
|
| 模块 | 路径前缀 | 描述 |
|
|||
|
|
|------|---------|------|
|
|||
|
|
| 书籍内容 | `/api/book` | 章节列表、内容获取、同步 |
|
|||
|
|
| 支付系统 | `/api/payment` | 订单创建、支付回调、状态查询 |
|
|||
|
|
| 分销系统 | `/api/referral` | 邀请码、收益查询、提现 |
|
|||
|
|
| 用户系统 | `/api/user` | 登录、注册、信息更新 |
|
|||
|
|
| 匹配系统 | `/api/match` | 寻找匹配、匹配历史 |
|
|||
|
|
| 管理后台 | `/api/admin` | 内容/订单/用户/分销管理 |
|
|||
|
|
| 配置系统 | `/api/config` | 系统配置获取 |
|
|||
|
|
|
|||
|
|
### 1.2 认证方式
|
|||
|
|
|
|||
|
|
**用户认证** (可选):
|
|||
|
|
```
|
|||
|
|
Cookie: session_id=<session-id>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**管理员认证** (必需):
|
|||
|
|
```
|
|||
|
|
Authorization: Bearer admin-token-secret
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 书籍内容API
|
|||
|
|
|
|||
|
|
### 2.1 获取所有章节
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/book/all-chapters`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl https://your-domain.com/api/book/all-chapters
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"id": "part-1",
|
|||
|
|
"number": "01",
|
|||
|
|
"title": "真实的人",
|
|||
|
|
"subtitle": "人性观察与社交逻辑",
|
|||
|
|
"chapters": [
|
|||
|
|
{
|
|||
|
|
"id": "chapter-1",
|
|||
|
|
"title": "人与人之间的底层逻辑",
|
|||
|
|
"sections": [
|
|||
|
|
{
|
|||
|
|
"id": "1.1",
|
|||
|
|
"title": "自行车荷总:一个行业做到极致是什么样",
|
|||
|
|
"price": 1,
|
|||
|
|
"isFree": true,
|
|||
|
|
"filePath": "book/第一篇|真实的人/...",
|
|||
|
|
"unlockAfterDays": 0
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total": 64
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 获取单章内容
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/book/chapter/:id`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl https://your-domain.com/api/book/chapter/1.1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": "1.1",
|
|||
|
|
"title": "自行车荷总:一个行业做到极致是什么样",
|
|||
|
|
"content": "# 章节内容...",
|
|||
|
|
"chapter": "第1章|人与人之间的底层逻辑",
|
|||
|
|
"section": "第一篇|真实的人",
|
|||
|
|
"isFree": true,
|
|||
|
|
"price": 1,
|
|||
|
|
"prev": null,
|
|||
|
|
"next": "1.2"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 同步章节
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/book/sync`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/book/sync \
|
|||
|
|
-H "Authorization: Bearer admin-token-secret"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"message": "同步完成",
|
|||
|
|
"synced": 64,
|
|||
|
|
"updated": 3
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 支付API
|
|||
|
|
|
|||
|
|
### 3.1 创建订单
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/payment/create-order`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/payment/create-order \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"userId": "user_123",
|
|||
|
|
"type": "fullbook",
|
|||
|
|
"amount": 9.9,
|
|||
|
|
"paymentMethod": "alipay"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**参数**:
|
|||
|
|
```typescript
|
|||
|
|
{
|
|||
|
|
userId: string // 用户ID
|
|||
|
|
type: 'section' | 'fullbook' // 订单类型
|
|||
|
|
sectionId?: string // 章节ID (章节购买时必需)
|
|||
|
|
amount: number // 支付金额
|
|||
|
|
paymentMethod: 'wechat' | 'alipay' | 'usdt' // 支付方式
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"orderId": "order_1705230000000",
|
|||
|
|
"amount": 9.9,
|
|||
|
|
"qrCode": "https://qr.alipay.com/...",
|
|||
|
|
"expireTime": "2026-01-14T11:00:00.000Z"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 支付回调 - 支付宝
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/payment/alipay/notify`
|
|||
|
|
|
|||
|
|
**参数** (支付宝POST):
|
|||
|
|
```
|
|||
|
|
out_trade_no: "order_1705230000000"
|
|||
|
|
trade_status: "TRADE_SUCCESS"
|
|||
|
|
total_amount: "9.90"
|
|||
|
|
buyer_id: "2088xxx"
|
|||
|
|
sign: "..."
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```
|
|||
|
|
success
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.3 支付回调 - 微信
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/payment/wechat/notify`
|
|||
|
|
|
|||
|
|
**参数** (微信XML):
|
|||
|
|
```xml
|
|||
|
|
<xml>
|
|||
|
|
<return_code>SUCCESS</return_code>
|
|||
|
|
<out_trade_no>order_1705230000000</out_trade_no>
|
|||
|
|
<total_fee>990</total_fee>
|
|||
|
|
</xml>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```xml
|
|||
|
|
<xml>
|
|||
|
|
<return_code>SUCCESS</return_code>
|
|||
|
|
<return_msg>OK</return_msg>
|
|||
|
|
</xml>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.4 验证支付状态
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/payment/verify?orderId={orderId}`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl "https://your-domain.com/api/payment/verify?orderId=order_123"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"orderId": "order_123",
|
|||
|
|
"status": "completed",
|
|||
|
|
"paidAt": "2026-01-14T10:30:00.000Z"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 分销API
|
|||
|
|
|
|||
|
|
### 4.1 获取邀请码
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/referral/code`
|
|||
|
|
|
|||
|
|
**认证**: 需要用户登录
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl https://your-domain.com/api/referral/code \
|
|||
|
|
-H "Cookie: session_id=xxx"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"code": "REF1705230",
|
|||
|
|
"url": "https://your-domain.com?ref=REF1705230"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.2 绑定推荐关系
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/referral/bind`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/referral/bind \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"userId": "user_123",
|
|||
|
|
"referralCode": "REF1705229"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"message": "绑定成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.3 查询收益
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/referral/earnings`
|
|||
|
|
|
|||
|
|
**认证**: 需要用户登录
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl https://your-domain.com/api/referral/earnings \
|
|||
|
|
-H "Cookie: session_id=xxx"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"total": 89.10,
|
|||
|
|
"pending": 35.64,
|
|||
|
|
"withdrawn": 53.46,
|
|||
|
|
"referralCount": 10,
|
|||
|
|
"recentOrders": [
|
|||
|
|
{
|
|||
|
|
"userId": "user_456",
|
|||
|
|
"amount": 9.9,
|
|||
|
|
"earnings": 8.91,
|
|||
|
|
"createdAt": "2026-01-14T10:00:00.000Z"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.4 申请提现
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/referral/withdraw`
|
|||
|
|
|
|||
|
|
**认证**: 需要用户登录
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/referral/withdraw \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-H "Cookie: session_id=xxx" \
|
|||
|
|
-d '{
|
|||
|
|
"amount": 50,
|
|||
|
|
"method": "alipay",
|
|||
|
|
"account": "13800138000",
|
|||
|
|
"name": "王**"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"withdrawalId": "wd_123",
|
|||
|
|
"amount": 50,
|
|||
|
|
"status": "pending",
|
|||
|
|
"estimatedTime": "1-3个工作日"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 用户API
|
|||
|
|
|
|||
|
|
### 5.1 登录
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/user/login`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/user/login \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"code": "123456"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"user": {
|
|||
|
|
"id": "user_123",
|
|||
|
|
"phone": "****8000",
|
|||
|
|
"nickname": "创业者小王",
|
|||
|
|
"hasFullBook": false
|
|||
|
|
},
|
|||
|
|
"token": "session_token_xxx"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.2 注册
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/user/register`
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/user/register \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"nickname": "创业者小王",
|
|||
|
|
"referralCode": "REF1705229"
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"user": {
|
|||
|
|
"id": "user_1705230000000",
|
|||
|
|
"phone": "****8000",
|
|||
|
|
"nickname": "创业者小王",
|
|||
|
|
"referralCode": "REF1705230"
|
|||
|
|
},
|
|||
|
|
"token": "session_token_xxx"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 匹配API
|
|||
|
|
|
|||
|
|
### 6.1 寻找匹配
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/match/find`
|
|||
|
|
|
|||
|
|
**认证**: 需要用户登录
|
|||
|
|
|
|||
|
|
**请求**:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST https://your-domain.com/api/match/find \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-H "Cookie: session_id=xxx" \
|
|||
|
|
-d '{
|
|||
|
|
"mbti": "INTP",
|
|||
|
|
"interests": ["私域运营", "内容创业"]
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"matchId": "match_123",
|
|||
|
|
"user": {
|
|||
|
|
"nickname": "创业者小李",
|
|||
|
|
"mbti": "ENTJ",
|
|||
|
|
"interests": ["私域运营", "供应链"],
|
|||
|
|
"matchRate": 85
|
|||
|
|
},
|
|||
|
|
"commonInterests": ["私域运营"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 匹配历史
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/match/history`
|
|||
|
|
|
|||
|
|
**认证**: 需要用户登录
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"matchId": "match_123",
|
|||
|
|
"nickname": "创业者小李",
|
|||
|
|
"matchRate": 85,
|
|||
|
|
"createdAt": "2026-01-14T10:00:00.000Z"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 管理后台API
|
|||
|
|
|
|||
|
|
### 7.1 概览数据
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/admin`
|
|||
|
|
|
|||
|
|
**认证**: 管理员Token
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"content": {
|
|||
|
|
"totalChapters": 65,
|
|||
|
|
"totalWords": 120000,
|
|||
|
|
"publishedChapters": 60,
|
|||
|
|
"draftChapters": 5
|
|||
|
|
},
|
|||
|
|
"payment": {
|
|||
|
|
"totalRevenue": 12800.50,
|
|||
|
|
"todayRevenue": 560.00,
|
|||
|
|
"totalOrders": 128,
|
|||
|
|
"todayOrders": 12
|
|||
|
|
},
|
|||
|
|
"referral": {
|
|||
|
|
"totalReferrers": 45,
|
|||
|
|
"activeReferrers": 28,
|
|||
|
|
"totalCommission": 11520.45
|
|||
|
|
},
|
|||
|
|
"users": {
|
|||
|
|
"totalUsers": 1200,
|
|||
|
|
"purchasedUsers": 128,
|
|||
|
|
"activeUsers": 456
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7.2 内容管理
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/admin/content`
|
|||
|
|
|
|||
|
|
**接口**: `POST /api/admin/content` - 创建
|
|||
|
|
|
|||
|
|
**接口**: `PUT /api/admin/content/:id` - 更新
|
|||
|
|
|
|||
|
|
**接口**: `DELETE /api/admin/content/:id` - 删除
|
|||
|
|
|
|||
|
|
### 7.3 订单管理
|
|||
|
|
|
|||
|
|
**接口**: `GET /api/admin/payment?status=completed&page=1&limit=20`
|
|||
|
|
|
|||
|
|
**响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"orders": [
|
|||
|
|
{
|
|||
|
|
"id": "order_123",
|
|||
|
|
"userId": "user_123",
|
|||
|
|
"amount": 9.9,
|
|||
|
|
"status": "completed",
|
|||
|
|
"createdAt": "2026-01-14T10:00:00.000Z"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total": 128,
|
|||
|
|
"page": 1,
|
|||
|
|
"limit": 20
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 错误码规范
|
|||
|
|
|
|||
|
|
### 8.1 HTTP状态码
|
|||
|
|
|
|||
|
|
| 状态码 | 含义 | 使用场景 |
|
|||
|
|
|--------|------|----------|
|
|||
|
|
| 200 | 成功 | 请求成功 |
|
|||
|
|
| 201 | 创建成功 | 资源创建成功 |
|
|||
|
|
| 400 | 请求错误 | 参数错误 |
|
|||
|
|
| 401 | 未授权 | 需要登录 |
|
|||
|
|
| 403 | 禁止访问 | 权限不足 |
|
|||
|
|
| 404 | 未找到 | 资源不存在 |
|
|||
|
|
| 500 | 服务器错误 | 内部错误 |
|
|||
|
|
|
|||
|
|
### 8.2 业务错误码
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
enum ErrorCode {
|
|||
|
|
// 用户相关
|
|||
|
|
USER_NOT_FOUND = 1001,
|
|||
|
|
USER_ALREADY_EXISTS = 1002,
|
|||
|
|
INVALID_PHONE = 1003,
|
|||
|
|
INVALID_CODE = 1004,
|
|||
|
|
|
|||
|
|
// 支付相关
|
|||
|
|
ORDER_NOT_FOUND = 2001,
|
|||
|
|
PAYMENT_FAILED = 2002,
|
|||
|
|
INSUFFICIENT_BALANCE = 2003,
|
|||
|
|
|
|||
|
|
// 分销相关
|
|||
|
|
INVALID_REFERRAL_CODE = 3001,
|
|||
|
|
WITHDRAWAL_FAILED = 3002,
|
|||
|
|
INSUFFICIENT_EARNINGS = 3003,
|
|||
|
|
|
|||
|
|
// 内容相关
|
|||
|
|
CHAPTER_NOT_FOUND = 4001,
|
|||
|
|
CHAPTER_NOT_PURCHASED = 4002,
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**错误响应格式**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": false,
|
|||
|
|
"error": {
|
|||
|
|
"code": 1001,
|
|||
|
|
"message": "用户不存在",
|
|||
|
|
"details": "用户ID: user_123"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 接口性能优化
|
|||
|
|
|
|||
|
|
### 9.1 缓存策略
|
|||
|
|
|
|||
|
|
**内容缓存**:
|
|||
|
|
```typescript
|
|||
|
|
// 章节内容缓存1小时
|
|||
|
|
res.setHeader('Cache-Control', 'public, max-age=3600')
|
|||
|
|
|
|||
|
|
// 章节列表缓存10分钟
|
|||
|
|
res.setHeader('Cache-Control', 'public, max-age=600')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**ETag**:
|
|||
|
|
```typescript
|
|||
|
|
const etag = generateETag(content)
|
|||
|
|
res.setHeader('ETag', etag)
|
|||
|
|
|
|||
|
|
if (req.headers['if-none-match'] === etag) {
|
|||
|
|
return res.status(304).end()
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.2 限流策略
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
// 接口限流: 100次/分钟
|
|||
|
|
const limiter = {
|
|||
|
|
'/api/book/all-chapters': { limit: 100, window: 60 },
|
|||
|
|
'/api/payment/create-order': { limit: 10, window: 60 },
|
|||
|
|
'/api/admin/*': { limit: 1000, window: 60 }
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**总结**: API设计遵循RESTful规范,响应格式统一,错误处理清晰。所有接口都有明确的认证要求和错误处理。核心功能包括内容获取、支付流程、分销系统、用户管理、匹配功能。
|