API 端点
本节说明系统提供的所有API端点列表,按适用模式分区。通用端点适用于所有模式,部分端点仅限API或仅限CMS模式。
系统提供的所有API端点列表。
下文按分区列出:系统与安装、调试为通用;认证与用户为API与CMS共用;CMS管理端点仅限CMS模式。
系统与安装
GET /anon/common/license- 获取许可证信息GET /anon/common/system- 获取系统信息GET /anon/common/client-ip- 获取客户端IPGET /anon/common/config- 获取配置信息GET /anon/ciallo- 恰喽~GET /anon/install- 安装页面GET /anon/install/api/token- 获取安装 CSRF TokenPOST /anon/install/api/mode- 选择安装模式GET /anon/install/api/get-mode- 获取当前选择的模式POST /anon/install/api/database- 配置数据库POST /anon/install/api/site- 配置站点信息,仅 CMS 模式POST /anon/install/api/install- 创建管理员账号并完成安装,仅 API 模式POST /anon/install/api/back- 返回上一步GET /anon- 系统根路径
调试
GET /anon/debug/login- 调试控制台登录页GET /anon/debug/console- Web调试控制台GET /anon/debug/api/info- 获取调试信息GET /anon/debug/api/performance- 获取性能数据GET /anon/debug/api/logs- 获取日志GET /anon/debug/api/errors- 获取错误日志GET /anon/debug/api/hooks- 获取钩子信息GET /anon/debug/api/tools- 获取工具信息POST /anon/debug/api/clear- 清空调试数据
认证与用户
POST /auth/login- 用户登录POST /auth/register- 用户注册,支持防刷限制POST /auth/logout- 用户注销GET /auth/check-login- 检查登录状态GET /auth/token- 获取TokenGET /auth/captcha- 获取验证码GET /user/info- 获取用户信息
CMS 管理端点
以下端点使用 /anon/cms/admin 前缀:
GET /anon/cms/admin/auth/token- 获取 Token,需登录GET /anon/cms/admin/auth/check-login- 检查登录状态,无需登录GET /anon/cms/admin/user/info- 获取用户信息,需登录GET /anon/cms/admin/config- 获取配置信息,无需登录GET /anon/cms/admin/statistics- 获取统计数据,需管理员权限GET /anon/cms/admin/settings/basic- 获取基本设置,需管理员权限POST /anon/cms/admin/settings/basic- 更新基本设置,需管理员权限GET /anon/cms/admin/settings/theme- 获取主题列表,需管理员权限POST /anon/cms/admin/settings/theme- 切换主题,需管理员权限GET /anon/cms/admin/settings/theme-options- 获取主题设置项,需管理员权限POST /anon/cms/admin/settings/theme-options- 更新主题设置项,需管理员权限
插件管理接口
GET /anon/cms/admin/plugins- 获取插件列表,需管理员权限POST /anon/cms/admin/plugins- 上传插件 ZIP,需管理员权限PUT /anon/cms/admin/plugins- 启用或停用插件,body 传 slug 与 action:activate 或 deactivate,需管理员权限DELETE /anon/cms/admin/plugins- 删除插件,需先停用,需管理员权限GET /anon/cms/admin/plugins/options?slug=xxx- 获取插件设置项,schema 来自插件 getSettingsSchema,values 来自 options 表 plugin:插件名,需管理员权限POST /anon/cms/admin/plugins/options- 保存插件设置项,body 传 slug 与 values,写入 options 表 plugin:插件名 JSON,需管理员权限
附件管理接口
GET /anon/cms/admin/attachments- 获取附件列表,需管理员权限POST /anon/cms/admin/attachments- 上传附件,需管理员权限DELETE /anon/cms/admin/attachments- 删除附件,需管理员权限
获取附件列表支持分页和类型筛选:
// 请求参数
{
"page": 1,
"page_size": 20,
"mime_type": "image" // 可选:image, video, audio, document, other 或完整 MIME 类型
}
// 响应
{
"code": 200,
"message": "获取附件列表成功",
"data": {
"list": [
{
"id": 1,
"user_id": 1,
"filename": "a1b2c3d4e5f67890-1760000000.jpg",
"original_name": "photo.jpg",
"mime_type": "image/jpeg",
"file_size": 102400,
"file_path": "/path/to/Upload/image/a1b2c3d4e5f67890-1760000000.jpg",
"url": "/anon/static/upload/image/a1b2c3d4e5f67890-1760000000",
"created_at": 1760000000
}
],
"total": 100,
"page": 1,
"page_size": 20
}
}上传附件:
// 请求:multipart/form-data
// file: 文件对象
// 响应
{
"code": 200,
"message": "上传成功",
"data": {
"id": 1,
"filename": "a1b2c3d4e5f67890-1760000000.jpg",
"original_name": "photo.jpg",
"mime_type": "image/jpeg",
"file_size": 102400,
"url": "/anon/static/upload/image/a1b2c3d4e5f67890-1760000000"
}
}分类管理接口
GET /anon/cms/admin/metas/categories- 获取分类列表,需管理员权限POST /anon/cms/admin/metas/categories- 创建分类,需管理员权限PUT /anon/cms/admin/metas/categories- 更新分类,需管理员权限DELETE /anon/cms/admin/metas/categories- 删除分类,需管理员权限
标签管理接口
GET /anon/cms/admin/metas/tags- 获取标签列表,需管理员权限POST /anon/cms/admin/metas/tags- 创建标签,需管理员权限PUT /anon/cms/admin/metas/tags- 更新标签,需管理员权限DELETE /anon/cms/admin/metas/tags- 删除标签,需管理员权限
文章管理接口
GET /anon/cms/admin/posts- 获取文章列表或单篇文章,需管理员权限POST /anon/cms/admin/posts- 创建文章,需管理员权限PUT /anon/cms/admin/posts- 更新文章,需管理员权限DELETE /anon/cms/admin/posts- 删除文章,需管理员权限
获取文章列表支持分页、搜索和筛选:
// 请求参数
{
"page": 1,
"page_size": 20,
"search": "关键词", // 可选:搜索标题或别名
"status": "publish", // 可选:draft, publish, private
"type": "post" // 可选:post, page
}
// 响应
{
"code": 200,
"message": "获取文章列表成功",
"data": {
"list": [...],
"total": 100,
"page": 1,
"page_size": 20
}
}获取单篇文章:
// 请求:GET /anon/cms/admin/posts?id=1
// 响应
{
"code": 200,
"message": "获取文章成功",
"data": {
"id": 1,
"title": "文章标题",
"content": "文章内容",
"status": "publish",
"type": "post",
"category_id": 1,
"tag_ids": "[1,2,3]",
"created_at": 1760000000,
"updated_at": 1760000000
}
}评论管理接口
GET /anon/cms/admin/comments- 获取评论列表,需管理员权限PUT /anon/cms/admin/comments- 更新评论:body 传id,可选status(approved/pending/spam/trash)或content(编辑内容),需管理员权限DELETE /anon/cms/admin/comments- 删除评论,body 传id,需管理员权限
评论列表请求参数(GET):
| 参数 | 类型 | 说明 |
|---|---|---|
| page | int | 页码,默认 1 |
| page_size | int | 每页条数,默认 20,最大 100 |
| status | string | 状态筛选:pending / approved / spam / trash |
| post_id | int | 按文章 ID 筛选 |
| type | string | 类型:user(登录用户)/ guest(游客) |
| keyword | string | 内容关键词(模糊匹配) |
| is_reply | int | 1=仅根评论,2=仅回复 |
| date_from | string | 开始日期(Y-m-d 或时间戳) |
| date_to | string | 结束日期(Y-m-d 或时间戳) |
列表项字段:除基础评论字段外,含 ip、user_agent、reply_to_name(回复关系)、ua_browser、ua_os(解析后的浏览器与系统)、is_reply(是否为回复)。
主题评论接口(无需登录)
GET /anon/cms/comments?post_id={id}- 获取某文章已通过评论;已登录时响应带currentUser(displayName、name、avatar)POST /anon/cms/comments- 提交评论;body:post_id、content必填;未登录需name、email;回复传parent_id
验证码保护:
- 当
app.captcha.enabled为true时,游客评论必须提供验证码 - 验证码通过
captcha字段提交 - 验证码获取:
GET /anon/auth/captcha返回 Base64 图片 - 登录用户提交评论不需要验证码
- 验证码验证失败返回错误:
"验证码错误,请重新输入"
访问日志接口
GET /anon/cms/admin/access-logs- 获取访问日志列表,需管理员权限GET /anon/cms/admin/access-logs/statistics- 获取访问日志统计,需管理员权限
访问日志列表请求参数(GET):
| 参数 | 类型 | 说明 |
|---|---|---|
| page | int | 页码,默认 1 |
| page_size | int | 每页条数,默认 20,最大 100 |
| start_date | string | 开始日期(Y-m-d 或时间戳) |
| end_date | string | 结束日期(Y-m-d 或时间戳) |
| ip | string | IP 地址(模糊匹配) |
| path | string | 路径(模糊匹配) |
| type | string | 类型:page / api / static |
| status_code | int | HTTP 状态码 |
| user_agent | string | User-Agent(模糊匹配) |
列表项字段:id、url、path、method、type、ip、user_agent、referer、status_code、response_time、created_at。
统计响应字段:total(总访问量)、unique_ips(独立 IP 数)、top_pages(热门页面,前 10 个)。
注意:
- 访问日志开关(
access_log_enabled)仅影响AccessLog模块,不影响其他日志系统 - 访问日志不影响文章阅读量功能(
posts.views) - 系统自动排除静态资源、API 和管理后台页面的访问记录
配置信息接口
GET /anon/cms/admin/config 和 GET /get-config 返回相同的配置信息:
{
"code": 200,
"message": "获取配置信息成功",
"data": {
"token": true,
"captcha": false,
"csrfToken": "xxx"
}
}可通过 config 钩子扩展配置字段:
Anon_System_Hook::add_filter('config', function($config) {
$config['customField'] = 'customValue';
return $config;
});基本设置接口
获取基本设置:
{
"code": 200,
"message": "获取基本设置成功",
"data": {
"title": "站点名称",
"description": "站点描述",
"keywords": "关键词",
"allow_register": false,
"api_prefix": "/api",
"api_enabled": false,
"upload_allowed_types": {
"image": "gif,jpg,jpeg,png",
"media": "mp3,mp4",
"document": "pdf,doc",
"other": ""
}
}
}更新基本设置:
{
"title": "新站点名称",
"description": "新站点描述",
"keywords": "新关键词",
"allow_register": true,
"api_prefix": "/api",
"api_enabled": true,
"upload_allowed_types": {
"image": "gif,jpg,jpeg,png,webp",
"media": "mp3,mp4,mov",
"document": "pdf,doc,docx",
"other": "zip,rar"
}
}统计数据接口
GET /anon/cms/admin/statistics 返回统计数据:
{
"code": 200,
"message": "获取统计数据成功",
"data": {
"posts": 100,
"comments": 50,
"attachments": 20,
"categories": 10,
"tags": 30,
"users": 5,
"published_posts": 80,
"draft_posts": 20,
"pending_comments": 5,
"approved_comments": 45,
"attachments_size": 10485760,
"total_views": 10000
}
}主题设置接口
获取主题列表:
{
"code": 200,
"message": "获取主题列表成功",
"data": {
"current": "default",
"themes": [
{
"name": "default",
"title": "默认主题",
"description": "默认主题描述"
}
]
}
}切换主题:
{
"theme": "default"
}主题设置项接口
获取主题设置项:
{
"code": 200,
"message": "获取主题设置项成功",
"data": {
"theme": "default",
"schema": {
"site_name": {
"type": "text",
"label": "站点名称",
"default": "我的网站"
}
},
"values": {
"site_name": "我的网站"
}
}
}更新主题设置项:
{
"theme": "default",
"values": {
"site_name": "新站点名称"
}
}静态文件
系统静态文件
GET /anon/static/debug/css- 调试控制台样式文件GET /anon/static/debug/js- 调试控制台脚本文件GET /anon/static/vue- Vue.js 生产版本
附件静态文件
附件文件通过静态路由提供访问,支持无后缀 URL 和图片格式转换:
GET /anon/static/upload/{filetype}/{file}- 获取原始附件文件GET /anon/static/upload/{filetype}/{file}/{format}- 获取转换后的图片,支持 webp、jpg、jpeg、png
文件类型分类:
image- 图片文件,image/*video- 视频文件,video/*audio- 音频文件,audio/*document- 文档文件,application/pdfother- 其他文件
示例:
// 获取原始图片
GET /anon/static/upload/image/a1b2c3d4e5f67890-1760000000
// 获取 WebP 格式,自动转换并缓存
GET /anon/static/upload/image/a1b2c3d4e5f67890-1760000000/webp
// 获取 PNG 格式
GET /anon/static/upload/image/a1b2c3d4e5f67890-1760000000/png说明:
- 附件 URL 不包含文件后缀,避免浏览器按静态资源规则直接返回 404
- 图片格式转换结果会缓存到
Upload/{filetype}/processed/目录 - 转换后的文件如果已存在且不旧于原文件,直接返回缓存
- 支持透明背景,PNG 或 WebP
静态文件路由注册: 通过 Anon_System_Config::addStaticRoute() 方法注册,支持自动缓存和压缩。详见 路由处理文档。
