Skip to content

API 端点

本节说明系统提供的所有API端点列表,按适用模式分区。通用端点适用于所有模式,部分端点仅限API或仅限CMS模式。

系统提供的所有API端点列表。

下文按分区列出:系统与安装、调试为通用;认证与用户为API与CMS共用;CMS管理端点仅限CMS模式。

系统与安装

  • GET /anon/common/license - 获取许可证信息
  • GET /anon/common/system - 获取系统信息
  • GET /anon/common/client-ip - 获取客户端IP
  • GET /anon/common/config - 获取配置信息
  • GET /anon/ciallo - 恰喽~
  • GET /anon/install - 安装页面
  • GET /anon/install/api/token - 获取安装 CSRF Token
  • POST /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 - 获取Token

  • GET /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 - 删除附件,需管理员权限

获取附件列表支持分页和类型筛选:

json
// 请求参数
{
  "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
  }
}

上传附件:

json
// 请求: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 - 删除文章,需管理员权限

获取文章列表支持分页、搜索和筛选:

json
// 请求参数
{
  "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
  }
}

获取单篇文章:

json
// 请求: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):

参数类型说明
pageint页码,默认 1
page_sizeint每页条数,默认 20,最大 100
statusstring状态筛选:pending / approved / spam / trash
post_idint按文章 ID 筛选
typestring类型:user(登录用户)/ guest(游客)
keywordstring内容关键词(模糊匹配)
is_replyint1=仅根评论,2=仅回复
date_fromstring开始日期(Y-m-d 或时间戳)
date_tostring结束日期(Y-m-d 或时间戳)

列表项字段:除基础评论字段外,含 ipuser_agentreply_to_name(回复关系)、ua_browserua_os(解析后的浏览器与系统)、is_reply(是否为回复)。

主题评论接口(无需登录)

  • GET /anon/cms/comments?post_id={id} - 获取某文章已通过评论;已登录时响应带 currentUser(displayName、name、avatar)
  • POST /anon/cms/comments - 提交评论;body:post_idcontent 必填;未登录需 nameemail;回复传 parent_id

验证码保护

  • app.captcha.enabledtrue 时,游客评论必须提供验证码
  • 验证码通过 captcha 字段提交
  • 验证码获取:GET /anon/auth/captcha 返回 Base64 图片
  • 登录用户提交评论不需要验证码
  • 验证码验证失败返回错误:"验证码错误,请重新输入"

访问日志接口

  • GET /anon/cms/admin/access-logs - 获取访问日志列表,需管理员权限
  • GET /anon/cms/admin/access-logs/statistics - 获取访问日志统计,需管理员权限

访问日志列表请求参数(GET):

参数类型说明
pageint页码,默认 1
page_sizeint每页条数,默认 20,最大 100
start_datestring开始日期(Y-m-d 或时间戳)
end_datestring结束日期(Y-m-d 或时间戳)
ipstringIP 地址(模糊匹配)
pathstring路径(模糊匹配)
typestring类型:page / api / static
status_codeintHTTP 状态码
user_agentstringUser-Agent(模糊匹配)

列表项字段idurlpathmethodtypeipuser_agentrefererstatus_coderesponse_timecreated_at

统计响应字段total(总访问量)、unique_ips(独立 IP 数)、top_pages(热门页面,前 10 个)。

注意

  • 访问日志开关(access_log_enabled)仅影响 AccessLog 模块,不影响其他日志系统
  • 访问日志不影响文章阅读量功能(posts.views
  • 系统自动排除静态资源、API 和管理后台页面的访问记录

配置信息接口

GET /anon/cms/admin/configGET /get-config 返回相同的配置信息:

json
{
  "code": 200,
  "message": "获取配置信息成功",
  "data": {
    "token": true,
    "captcha": false,
    "csrfToken": "xxx"
  }
}

可通过 config 钩子扩展配置字段:

php
Anon_System_Hook::add_filter('config', function($config) {
    $config['customField'] = 'customValue';
    return $config;
});

基本设置接口

获取基本设置:

json
{
  "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": ""
    }
  }
}

更新基本设置:

json
{
  "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 返回统计数据:

json
{
  "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
  }
}

主题设置接口

获取主题列表:

json
{
  "code": 200,
  "message": "获取主题列表成功",
  "data": {
    "current": "default",
    "themes": [
      {
        "name": "default",
        "title": "默认主题",
        "description": "默认主题描述"
      }
    ]
  }
}

切换主题:

json
{
  "theme": "default"
}

主题设置项接口

获取主题设置项:

json
{
  "code": 200,
  "message": "获取主题设置项成功",
  "data": {
    "theme": "default",
    "schema": {
      "site_name": {
        "type": "text",
        "label": "站点名称",
        "default": "我的网站"
      }
    },
    "values": {
      "site_name": "我的网站"
    }
  }
}

更新主题设置项:

json
{
  "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/pdf
  • other - 其他文件

示例:

// 获取原始图片
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() 方法注册,支持自动缓存和压缩。详见 路由处理文档

Released under the MIT License.