文档目录
通用接口

简介

本文件为“通用功能模块”的API接口文档,面向所有API使用者,覆盖系统初始化、验证码、全局搜索、国际化语言包、统一错误码与响应格式等通用能力。文档以实际源码为依据,给出接口职责、请求参数、返回数据、调用流程与注意事项,帮助快速集成与排错。

项目结构

本项目采用模块化路由与控制器分层:

  • API入口位于 api/ 目录,控制器按业务域划分(如 bootstrap、captcha、search 等)。
  • 路由定义在 api/route/*.php,将URL映射到具体控制器方法。
  • 通用基础设施位于 core/ 目录,提供统一响应封装、请求对象、验证码、错误码等。
  • 业务服务多位于 front/service/ 或 core/service/,通过依赖注入在控制器中使用。
graph TB
Client["客户端"] --> Router["API路由<br/>api/route/*.php"]
Router --> CBoot["引导控制器<br/>BootstrapController"]
Router --> CCapt["验证码控制器<br/>CaptchaController"]
Router --> CSrch["搜索控制器<br/>SearchController"]
CBoot --> SBoot["引导服务<br/>BootstrapService"]
CCapt --> SReg["注册服务<br/>RegistrationService"]
CCapt --> SCap["验证码服务<br/>Captcha"]
CSrch --> SSrch["搜索服务<br/>SearchService"]
CBoot --> Resp["统一响应<br/>ApiResponse"]
CCapt --> Resp
CSrch --> Resp

核心组件

  • 统一响应封装:ApiResponse,用于标准化成功/失败响应体。
  • 统一错误码:ApiCodes,集中管理业务错误码。
  • 请求对象:Request,提供安全的输入读取与类型转换。
  • 验证码服务:Captcha,负责短信/图形验证码发送与校验。
  • 注册服务:RegistrationService,生成验证码表单token对。
  • 搜索服务:SearchService,构建搜索结果数据。
  • 引导服务:BootstrapService,构建应用启动所需的基础信息。

架构总览

API层遵循“路由→控制器→服务→基础设施”的分层模式:

  • 路由层仅做路径解析与调度。
  • 控制器负责参数校验、调用服务、组装响应。
  • 服务层承载业务逻辑,可复用前台或核心服务。
  • 基础设施提供跨模块能力(响应、错误码、验证码、请求处理)。
sequenceDiagram
participant U as "客户端"
participant R as "路由"
participant C as "控制器"
participant S as "服务"
participant I as "基础设施"
U->>R : HTTP请求
R->>C : 分发到对应控制器方法
C->>S : 执行业务逻辑
S->>I : 调用验证码/搜索/配置等能力
I-->>S : 返回结果
S-->>C : 返回业务数据
C->>I : ApiResponse : : success/error
I-->>U : 标准JSON响应

详细组件分析

系统初始化接口(引导)

  • 作用:获取版本信息、站点基础配置、导航列表、语言包指纹等启动所需数据。
  • 路由:参考 api/route/bootstrap.php
  • 控制器:BootstrapController::index
  • 服务:BootstrapService::build
  • 响应:统一使用 ApiResponse::success 返回数据体

调用序列

sequenceDiagram
participant U as "客户端"
participant R as "路由"
participant C as "BootstrapController"
participant S as "BootstrapService"
participant A as "ApiResponse"
U->>R : GET /bootstrap
R->>C : index()
C->>S : build()
S-->>C : 基础数据
C->>A : success(data)
A-->>U : JSON响应

验证码接口

  • 作用:颁发验证码表单token对;下发验证码(支持短信/图形),并返回验证所需信息。
  • 路由:参考 api/route/captcha.php
  • 控制器:CaptchaController
    • token:颁发 captcha_token 与 storage_captcha_token
    • verification:发送验证码,内部调用 Captcha::sendCaptcha
  • 服务:
    • RegistrationService::createApiVerificationToken
    • Captcha::sendCaptcha
  • 响应:成功返回 data;失败返回统一错误码与消息

调用序列

sequenceDiagram
participant U as "客户端"
participant R as "路由"
participant C as "CaptchaController"
participant RS as "RegistrationService"
participant CAP as "Captcha"
participant A as "ApiResponse"
U->>R : POST /captcha/token
R->>C : token()
C->>RS : createApiVerificationToken()
RS-->>C : {captcha_token, storage_captcha_token}
C->>A : success({captcha_token, storage_captcha_token})
A-->>U : JSON响应
U->>R : POST /captcha/verification
R->>C : verification(request)
C->>CAP : sendCaptcha(type, account, captcha_token, check, storage_captcha_token)
CAP-->>C : {code : 'success'|'fail', msg, verification?}
alt 成功
C->>A : success(verification)
A-->>U : JSON响应
else 失败
C->>A : error(ApiCodes : : BUSINESS_RULE_VIOLATION, msg, status=422)
A-->>U : JSON响应
end

全局搜索接口

  • 作用:根据关键词、模块、分类、分页、排序等条件查询内容。
  • 路由:参考 api/route/search.php
  • 控制器:SearchController::index
  • 服务:SearchService::buildSearchResultData
  • 参数:
    • q:搜索关键词(必填校验)
    • module:搜索模块(默认 product)
    • category_id:分类ID
    • page:页码
    • by/sort:排序字段与方向
  • 响应:返回标题、关键词、模块、结果集、排序选项等

调用序列

sequenceDiagram
participant U as "客户端"
participant R as "路由"
participant C as "SearchController"
participant S as "SearchService"
participant A as "ApiResponse"
U->>R : GET /search?q=...&module=...
R->>C : index(request)
C->>C : 参数校验与默认值处理
C->>S : buildSearchResultData(keyword,module,category_id,page,by,sort)
S-->>C : 搜索结果数据
C->>A : success(data)
A-->>U : JSON响应

国际化支持(语言包)

  • 说明:引导接口会返回语言包指纹 lang_v,便于客户端增量更新语言包。语言包具体内容通过独立 route=lang 接口下发(路由定义见 api/route/lang.php)。
  • 建议:客户端首次启动时获取 lang_v,若与服务端不一致则拉取最新语言包。

文件上传接口

  • 现状:当前仓库未提供统一的“文件上传”API控制器。前端与后台存在附件存储实现(如 attachment()->store/storeDraft),但API层未暴露通用上传接口。
  • 建议:如需API上传能力,可在 api/controller/file 下新增控制器,复用 core/filesystem 与 attachment 能力,并遵循统一响应与错误码规范。

数据字典与系统日志

  • 现状:未在API层发现专用的“数据字典”“系统日志”控制器。此类能力通常由后台管理模块提供,或通过特定业务模块接口间接获取。
  • 建议:如需对外暴露,可在相应模块下新增控制器,并遵循统一响应与错误码规范。

依赖关系分析

  • 控制器依赖服务:BootstrapController→BootstrapService;CaptchaController→RegistrationService、Captcha;SearchController→SearchService。
  • 服务依赖基础设施:验证码服务依赖 Captcha;搜索服务依赖搜索底层能力;引导服务依赖站点配置与缓存。
  • 统一响应与错误码贯穿所有控制器。
graph LR
BootCtrl["BootstrapController"] --> BootSvc["BootstrapService"]
CaptCtrl["CaptchaController"] --> RegSvc["RegistrationService"]
CaptCtrl --> CapSvc["Captcha"]
SearCtrl["SearchController"] --> SearSvc["SearchService"]
BootCtrl --> Resp["ApiResponse"]
CaptCtrl --> Resp
SearCtrl --> Resp

性能注意事项

  • 引导接口应缓存站点配置与导航,避免每次请求都重建。
  • 验证码发送需限制频率与IP/账号维度防刷。
  • 搜索接口建议结合索引与分页,减少大结果集传输。
  • 语言包按需加载,客户端基于 lang_v 增量更新。

故障排查指南

  • 统一错误码:使用 ApiCodes 中的常量进行错误分类,便于客户端统一处理。
  • 常见错误:
    • 验证码失败:检查 type、account、captcha_token、storage_captcha_token 是否匹配且有效。
    • 搜索关键词非法:确保关键词符合规则,必要时清理空格与特殊字符。
  • 响应格式:始终使用 ApiResponse::success/error 包装返回体,保证客户端解析一致性。

结论

本仓库已提供稳定的通用API能力:系统初始化、验证码、全局搜索与国际化语言包指纹。所有接口均遵循统一响应与错误码规范,便于客户端集成与维护。对于文件上传、数据字典、系统日志等能力,当前API层尚未暴露,可按需扩展。

附录

统一响应格式

  • 成功:{ code: "success", data: {...}, message: "" }
  • 失败:{ code: "error", data: {}, message: "错误描述" }
  • 状态码:HTTP 200/422 等由控制器决定,业务错误码集中在 ApiCodes。

版本管理与向后兼容策略

  • 版本标识:引导接口返回 version 与 lang_v,客户端据此判断是否需要升级资源。
  • 兼容性:新增字段保持可选,废弃字段保留一段时间并提供迁移提示;破坏性变更通过新路由或新版本前缀发布。
  • 建议:在路由或服务层增加版本协商机制,逐步淘汰旧接口。
添加日期:2026-10-05