文档目录
下载中心API

简介

本文件为下载中心模块的API参考文档,面向资源分享平台与知识库系统的开发者。基于仓库中已实现的下载模块,文档覆盖以下能力边界:

  • 文件管理:列表、详情、后台新增/编辑/删除/批量操作(含附件上传、内容处理)。
  • 分类管理:多级分类树、图标/名称/描述等字段、可选同步到导航。
  • 预览与缩略图:通过附件系统生成URL;缩略图由附件系统负责。
  • 权限与计费:当前实现未内置“积分/会员/限时”等付费逻辑,可通过自定义扩展点接入。
  • 搜索与筛选:支持按分类、关键字、分页、归档时间筛选。
  • 统计与分析:记录点击量;可扩展埋点用于行为分析。
  • 安全与存储:XSS过滤、附件上传、可配置存储后端(由附件系统提供)。

说明:

  • 本文所有接口定义均基于仓库实际代码;未实现的能力以“可扩展”方式给出建议方案,不虚构现有接口。

项目结构

下载中心模块采用前后端分离的控制器+服务层+模型层组织方式:

  • API层:对外暴露REST风格接口(列表、详情)。
  • 前台层:渲染页面、SEO、面包屑、导航。
  • 后台层:管理CRUD、批量操作、日志审计。
  • 服务层:封装业务规则、数据组装、附件处理、统计记录。
  • 模型层:ORM映射、查询作用域、关联关系。
graph TB
Client["客户端"] --> API["API 控制器<br/>DownloadController"]
API --> Svc["前台服务<br/>DownloadService"]
Svc --> ModelD["模型 Download"]
Svc --> ModelC["模型 DownloadCategory"]
Admin["后台控制器"] --> AdminSvc["后台服务"]
AdminSvc --> ModelD
AdminSvc --> ModelC
ModelD --> DB["数据库"]
ModelC --> DB

核心组件

  • API控制器:提供下载列表与详情接口,复用前台服务进行数据构建与统计。
  • 前台控制器:负责页面渲染、SEO、导航、面包屑、归档解析。
  • 后台控制器与服务:完成下载的增删改查、批量操作、附件上传、内容清洗、审计日志。
  • 分类控制器与服务:维护多级分类树、图标、排序、导航同步。
  • 模型:定义表结构、关联、查询作用域、默认排序、附件URL转换。

架构总览

下载中心遵循“控制器→服务→模型”的分层架构,API与前台共享服务层能力,后台提供管理功能。

sequenceDiagram
participant C as "客户端"
participant A as "API控制器"
participant S as "前台服务"
participant M as "模型"
C->>A : GET /api/?route=download (列表)
A->>S : buildDownloadListData(...)
S->>M : 查询下载列表(分类/分页/归档)
M-->>S : 列表数据
S-->>A : 组装结果
A-->>C : JSON响应
C->>A : GET /api/?route=download/{id} (详情)
A->>S : buildDownloadShowData(id)
S->>M : 查询详情
M-->>S : 详情数据
S->>S : recordDownloadView(id)
S-->>A : 详情数据(+点击计数)
A-->>C : JSON响应

详细组件分析

API接口:下载列表

  • 路径:GET /api/?route=download
  • 查询参数
    • id/category_slug:分类ID或分类别名(二选一)
    • year/month:归档年份/月份
    • page:页码
  • 返回字段(摘要)
    • title:页面标题
    • category_id:分类ID
    • download_list:下载条目数组
    • download_category:分类树
    • cate_info:分类信息(名称、关键词、描述、URL)
  • 行为
    • 根据分类或归档条件构建列表
    • 使用配置的每页条数进行分页
    • 返回分类树以便前端展示

API接口:下载详情

  • 路径:GET /api/?route=download/{id}
  • 路径参数
    • id:下载项ID(也支持slug/category_slug组合)
  • 返回字段(摘要)
    • title:详情页标题
    • download:下载详情对象
    • defined:自定义字段集合
    • cate_info:所属分类信息
  • 行为
    • 校验ID有效性
    • 获取详情并自增点击量
    • 返回详情数据

前台页面:列表与详情

  • 列表页
    • 支持分类、归档、分页
    • 输出SEO标题、关键词、描述
    • 输出导航、面包屑、分类树
  • 详情页
    • 读取详情并自增点击
    • 输出SEO、导航、面包屑、推荐内容

后台管理:下载项CRUD

  • 列表
    • 支持按分类、关键字、分页查询
    • 展示图片、大小、状态、创建时间
  • 新增/编辑
    • 表单校验在请求层完成
    • 内容XSS过滤,远程图片本地化
    • 主图上传与更新
    • 自定义字段模板加载
  • 删除
    • 二次确认机制
    • 审计日志记录
  • 批量操作
    • 批量删除
    • 批量转移分类
flowchart TD
Start(["进入后台下载列表"]) --> Filter["选择分类/输入关键字/翻页"]
Filter --> Query["查询下载列表"]
Query --> Render["渲染表格与分页"]
Render --> Action{"执行操作?"}
Action --> |新增/编辑| Form["表单提交(校验/XSS/附件)"]
Form --> Save["持久化并记录日志"]
Action --> |删除| Confirm["二次确认"]
Confirm --> Del["删除并记录日志"]
Action --> |批量| Batch["批量删除/转移分类"]
Batch --> Save
Save --> End(["完成"])
Del --> End

后台管理:分类CRUD

  • 列表:扁平分类树
  • 新增/编辑:支持文本或图片图标模式、排序、是否同步到导航
  • 删除:检查占用与子分类,二次确认后删除,清理语言与导航数据
classDiagram
class CategoryService {
+buildCategoryDefaultData()
+insert(data, adminId) int
+update(data, adminId) void
+delete(catId, data) array
}
class DownloadCategory {
+flat()
+tree(parentId)
+hasRecords(catId) bool
+hasChildCategory(catId) bool
}
CategoryService --> DownloadCategory : "读写分类"

数据模型与关系

  • 下载项模型:包含标题、别名、自定义字段、内容、关键词、描述、排序、创建时间、图片、下载链接、大小等字段;支持分类关联、关键字过滤、默认排序。
  • 分类模型:支持多级树、扁平列表、记录占用与子分类检查。
erDiagram
DOWNLOAD {
int id PK
int category_id FK
string title
string slug
text content
string keywords
text description
int sort
datetime created_at
string image
string download_link
string size
}
DOWNLOAD_CATEGORY {
int id PK
int parent_id
string name
string slug
string icon
string keywords
text description
int sync_to_nav
int sort
}
DOWNLOAD_CATEGORY ||--o{ DOWNLOAD : "category_id"

依赖关系分析

  • API控制器依赖前台服务进行数据构建与统计。
  • 前台控制器依赖服务、导航、面包屑、SEO、Schema服务。
  • 后台控制器依赖后台服务进行CRUD与批量操作。
  • 服务层依赖模型进行数据访问,依赖附件系统进行文件上传与URL生成。
  • 模型层通过ORM关联分类,提供查询作用域与默认排序。
graph LR
API["API控制器"] --> FS["前台服务"]
FS --> MD["模型 Download"]
FS --> MC["模型 DownloadCategory"]
Admin["后台控制器"] --> AS["后台服务"]
AS --> MD
AS --> MC
MD --> DB["数据库"]
MC --> DB

性能与扩展性

  • 列表分页:默认每页条数可配置,减少单次响应体积。
  • 附件URL预取:模型层对图片字段进行批量预热,降低N+1查询开销。
  • 排序策略:支持手动排序开关,优化列表展示顺序。
  • 可扩展点
    • 权限与计费:可在服务层插入鉴权与计费逻辑(如积分、会员、限时),在详情与下载前拦截。
    • 格式转换与预览:可在附件系统中集成在线预览与缩略图生成。
    • 病毒扫描:可在上传流程中接入第三方扫描服务,阻断恶意文件。
    • 统计埋点:在详情访问时追加用户行为事件,便于后续分析。

故障排查指南

  • 页面错误:当分类或详情ID无效时,会抛出领域异常并重定向至首页或返回列表。
  • 非法参数:后台新增/编辑/删除时若缺少必要参数,将抛出非法操作异常。
  • 删除保护:删除分类时会检查是否存在子分类或被引用,阻止误删。
  • 审计日志:所有关键操作(新增、更新、删除、批量)均记录管理员操作日志,便于追溯。

结论

下载中心模块提供了完整的下载项与分类管理能力,具备列表/详情API、后台CRUD、批量操作、附件上传、SEO与导航集成等能力。对于权限控制、计费、预览、病毒扫描、统计等高级能力,建议在服务层与附件系统中扩展实现,以满足不同业务场景需求。

附录:接口清单

  • 下载列表
    • 方法:GET
    • 路径:/api/?route=download
    • 参数:id/category_slug、year、month、page
    • 返回:title、category_id、download_list、download_category、cate_info
  • 下载详情
    • 方法:GET
    • 路径:/api/?route=download/{id}
    • 返回:title、download、defined、cate_info
  • 后台下载管理(Web)
    • 列表:GET /?route=download
    • 新增:GET/POST /?route=download/create
    • 编辑:GET/POST /?route=download/edit?id={id}
    • 删除:POST /?route=download/destroy?id={id}&confirm=1
    • 批量:POST /?route=download&action=del_all|category_move
  • 后台分类管理(Web)
    • 列表:GET /?route=download/category
    • 新增:GET/POST /?route=download/category/create
    • 编辑:GET/POST /?route=download/category/edit?id={id}
    • 删除:POST /?route=download/category/destroy?id={id}&confirm=1
添加日期:2026-10-05