📝 docs(readme): 同步近期改动并修正过时内容

- 补充 /healthz、protect_all 配置、错误响应规范(400/500/401)、缓存机制表
- 修正接口参数名与代码不符处:content 实为 item_id、multi-content 需 book_id、media 系列为 item_ids 等
- /vacuum 修正为 POST;技术栈删除已移除的 Gin,改为标准库 net/http
This commit is contained in:
chenxin committed 2026-09-29 23:52:10 +08:00
1 parent 586b714f3c
commit bb0cc39950
1 file changed
+32 -18
+32 -18
View File
@@ -34,9 +34,11 @@ Go 语言实现的番茄小说非官方 API 服务,完整实现了签名算法
- **签名算法** - Gorgon、8404、Argus、Ladon、Khronos - **签名算法** - Gorgon、8404、Argus、Ladon、Khronos
- **设备密钥池** - 多设备轮换、自动补充 - **设备密钥池** - 多设备轮换、自动补充
- **SQLite 缓存** - 本地缓存、过期清理、数据库压缩;支持切换 PostgreSQL 与 Redis - **多级缓存** - 正文/详情/目录等 24 小时缓存,搜索/分类短缓存;存储后端可选 SQLite / PostgreSQL / Redis
- **配置热更新** - 修改配置无需重启 - **配置热更新** - 修改配置无需重启
- **访问控制** - 支持 AccessKey 验证 - **访问控制** - AccessKey 验证(常量时间比较防时序攻击),可扩展保护全部业务接口
- **优雅退出** - 超时保护、信号驱动的平滑关闭
- **错误规范** - 统一 JSON 错误响应,缺参 400 / 服务端错误 500
## 项目结构 ## 项目结构
@@ -134,36 +136,37 @@ go run ./cmd/fanqie
| 接口 | 方法 | 说明 | | 接口 | 方法 | 说明 |
| ------ | ------ | ------ | | ------ | ------ | ------ |
| `GET /` | GET | 服务首页 | | `GET /` | GET | 服务首页 |
| `GET /healthz` | GET | 存活探针(不校验密钥,供容器/反代使用) |
| `GET /status` | GET | 服务状态(需 AccessKey) | | `GET /status` | GET | 服务状态(需 AccessKey) |
| `GET /self-info` | GET | 自我信息(需 AccessKey) | | `GET /self-info` | GET | 自我信息(需 AccessKey) |
| `GET /vacuum` | GET | 数据库压缩(需 AccessKey) | | `POST /vacuum` | POST | 数据库压缩(需 AccessKey) |
### 书籍相关 ### 书籍相关
| 接口 | 方法 | 说明 | 参数 | | 接口 | 方法 | 说明 | 参数 |
| ------ | ------ | ------ | ------ | | ------ | ------ | ------ | ------ |
| `/search` | GET | 搜索书籍 | `keyword`, `tab_type`, `offset` | | `/search` | GET | 搜索书籍 | `query`(或 `key`), `tab_type`, `offset` |
| `/detail` | GET | 书籍详情 | `book_id` | | `/detail` | GET | 书籍详情 | `book_id` |
| `/info` | GET | 书籍详情(同 detail) | `book_id` | | `/info` | GET | 书籍详情(同 detail) | `book_id` |
| `/catalog` | GET | 章节目录 | `book_id` | | `/catalog` | GET | 章节目录 | `book_id` |
| `/directory/all_items` | GET | 章节目录(同 catalog) | `book_id` | | `/directory/all_items` | GET | 章节目录(同 catalog) | `book_id` |
| `/multi-detail` | GET | 批量书籍详情 | `book_ids`(逗号分隔) | | `/multi-detail` | GET | 批量书籍详情 | `book_id`(逗号分隔) |
### 内容相关 ### 内容相关
| 接口 | 方法 | 说明 | 参数 | | 接口 | 方法 | 说明 | 参数 |
| ------ | ------ | ------ | ------ | | ------ | ------ | ------ | ------ |
| `/content` | GET | 章节内容 | `chapter_id`, `book_id` | | `/content` | GET | 章节内容 | `item_id` |
| `/multi-content` | GET | 批量章节内容 | `chapter_ids`(逗号分隔) | | `/multi-content` | GET | 批量章节内容 | `book_id`, `item_ids`(逗号分隔) |
| `/item-summary` | GET | 章节摘要 | `book_id`, `chapter_id` | | `/item-summary` | GET | 章节摘要 | `book_id`, `item_ids`(逗号分隔) |
### 评论相关 ### 评论相关
| 接口 | 方法 | 说明 | 参数 | | 接口 | 方法 | 说明 | 参数 |
| ------ | ------ | ------ | ------ | | ------ | ------ | ------ | ------ |
| `/chapter_review` | GET | 章节评论 | `book_id`, `chapter_id` | | `/chapter_review` | GET | 章节评论 | `book_id`, `item_id` |
| `/review` | GET | 书评列表 | `book_id`, `offset`, `limit` | | `/review` | GET | 书评列表 | `book_id`, `item_id`, `para`, `comment_id`, `offset`, `limit` |
| `/review_html` | GET | 评论 HTML | `book_id`, `chapter_id` | | `/review_html` | GET | 评论 HTML | `book_id`, `item_id`, `para` |
### 分类相关 ### 分类相关
@@ -176,9 +179,9 @@ go run ./cmd/fanqie
| 接口 | 方法 | 说明 | 参数 | | 接口 | 方法 | 说明 | 参数 |
| ------ | ------ | ------ | ------ | | ------ | ------ | ------ | ------ |
| `/audio` | GET | 音频内容 | `audio_id`, `tone_id` | | `/audio` | GET | 音频内容 | `item_ids`, `tone_id`, `output` |
| `/video` | GET | 视频内容 | `video_id` | | `/video` | GET | 视频内容 | `item_ids` |
| `/manga` | GET | 漫画内容 | `manga_id`, `chapter_id` | | `/manga` | GET | 漫画内容 | `item_ids`(或 `item_id`), `show_html`, `output` |
| `/manga/image/{itemID}/{index}` | GET | 漫画图片 | 路径参数 | | `/manga/image/{itemID}/{index}` | GET | 漫画图片 | 路径参数 |
## 内容获取示例 ## 内容获取示例
@@ -235,6 +238,7 @@ server:
host: "0.0.0.0" # 监听地址 host: "0.0.0.0" # 监听地址
port: "40180" # 监听端口 port: "40180" # 监听端口
access_key: "" # 访问密钥(可选) access_key: "" # 访问密钥(可选)
protect_all: false # 业务接口也要求访问密钥(公网部署建议开启)
# 番茄小说配置 # 番茄小说配置
fanqie: fanqie:
@@ -324,6 +328,7 @@ cp .env.example .env
| `server.host` | HTTP 服务监听地址 | `0.0.0.0` | | `server.host` | HTTP 服务监听地址 | `0.0.0.0` |
| `server.port` | HTTP 服务监听端口 | `40180` | | `server.port` | HTTP 服务监听端口 | `40180` |
| `server.access_key` | 访问密钥,设为空则不验证 | - | | `server.access_key` | 访问密钥,设为空则不验证 | - |
| `server.protect_all` | 业务接口是否也要求访问密钥 | `false` |
| `fanqie.algorithm` | 签名算法 `gorgon` / `8404` | `gorgon` | | `fanqie.algorithm` | 签名算法 `gorgon` / `8404` | `gorgon` |
| `fanqie.signature` | 签名方法 `sign2` / `sign4` | `sign4` | | `fanqie.signature` | 签名方法 `sign2` / `sign4` | `sign4` |
| `fanqie.content.*` | 正文内容处理选项 | 见上文 | | `fanqie.content.*` | 正文内容处理选项 | 见上文 |
@@ -377,15 +382,24 @@ cp .env.example .env
## 缓存机制 ## 缓存机制
- **SQLite 本地缓存** - 缓存书籍内容和章节数据 - **接口缓存** - 命中直接返回,不打上游(Redis 启用时优先走 Redis)
- **自动清理** - 定期清理过期缓存 - **自动清理** - 定期清理过期缓存(Redis 由 TTL 自动过期)
- **数据库压缩** - 支持 VACUUM 操作优化数据库 - **数据库压缩** - 支持 VACUUM 操作优化数据库
| 接口 | 缓存时长 |
| ------ | ------ |
| `/content` | 24 小时 |
| `/detail`、`/info`、`/catalog`、`/multi-detail`、`/item-summary` | 24 小时 |
| `/search`、`/category-front`、`/category-landing` | 10 分钟 |
| `/audio` 代理链接 | 2 小时(匹配 CDN 有效期) |
失败响应不缓存;评论类接口为动态数据,不缓存。
## 技术栈 ## 技术栈
- **Go 1.24** - 编程语言 - **Go 1.24** - 编程语言
- **Gin** - HTTP 框架(间接依赖) - **net/http** - 标准库 HTTP 服务(超时保护 + 优雅退出)
- **SQLite3** - 本地数据库 - **SQLite3 / PostgreSQL / Redis** - 缓存与存储
- **Viper** - 配置管理 - **Viper** - 配置管理
- **goquery** - HTML 解析 - **goquery** - HTML 解析