# FeerApi(PHP + MySQL)免费 API 接口管理/发布系统
> 当前版本:v6.0.1(以 `config/config.php` 为准)
> 运行模式:MySQL(`core/JsonDB.php` 为兼容层,底层仅使用 MySQL)
FeerApi 是一个面向开发者的 API 接口聚合与发布系统,包含前台展示、在线测试、接口中转代理、用户投稿与审核、后台管理、调用统计与实时日志等功能,并提供 **Web 一键安装向导**,适合快速部署到服务器并开源发布。
---
## 演示地址
- **线上演示**:`https://api.xunjinlu.fun`
## 演示截图
截图目录:`演示截图/`(数字命名,文件名固定)
> 说明:以下为截图与页面功能的对应关系(你也可以按实际情况调整标题顺序/描述文字)。
### 229.png

### 230.png

### 231.png

### 232.png

### 233.png

## 主要功能
### 前台(官网)
- **API 列表/搜索/分类**:`index.php`、`apis.php`
- **API 详情页**:`api-detail.php`
- 请求参数展示(JSON 美化)
- 响应示例展示(自动 JSON 格式化)
- 在线测试(通过 `api-proxy.php` 规避 CORS)
- **文章/页面**:`articles.php`、`article.php`、`about.php`、`pages.php`
- **友链**:`links.php`、`apply-link.php`
- **首页合作伙伴**:首页底部新增响应式合作伙伴 Logo 网格,支持后台启用/关闭与可选跳转
- **首页公告横幅**:导航下方新增滚动公告条,支持点击弹窗放大查看完整内容
- **赞助我们**:`donate.php`(赞助榜单置顶展示,收款码区域位于下方)
### 用户后台(投稿者)
- **注册/登录**:`user/register.php`、`user/login.php`
- **用户权限分级**:注册时可选择“普通用户 / 开发者”
- 普通用户:更聚焦密钥、积分与调用消费,不显示开发者投稿管理视图
- 开发者:保留原有投稿与接口管理全功能
- **第三方登录(可选)**:QQ / Gitee(见后台设置页)
- **投稿 API / 编辑 API**:`user/api-add.php`、`user/api-edit.php`
- 投稿后默认进入 **待审核**(`review_status=0`)
- 二次编辑会触发重新审核
- API 详细文档已接入 Joe 编辑器(Markdown 工具栏)
### 管理员后台
- **控制台**:`admin/index.php`(趋势图 + 实时调用日志)
- **API 管理**:`admin/apis.php`
- 审核与运行状态分离(`review_status` 与 `runtime_status`)
- 批量启用/禁用/维护(已避免与审核状态冲突)
- **待审核/已拒绝**:`admin/pending-apis.php`、`admin/rejected-apis.php`
- **调用统计**:`admin/stats.php`
- **系统设置**:`admin/settings.php`
- 中转代理基础路径 `api_proxy_base_path`
- 站点标题/Logo/域名等
- **合作伙伴管理**:`admin/partners.php`
- 支持合作伙伴名称、Logo、跳转链接、显示状态与排序管理
- 电脑端侧边栏与手机端“更多”页均可直达
- **公告管理**:`admin/announcements.php`
- 支持公告发布、编辑、置顶、启用/关闭
- 公告内容编辑已接入 Joe 编辑器
- **赞助管理**:`admin/sponsors.php`
- 管理员手动登记赞助者头像/名称/链接/赞助内容
- 支持 QQ 自动头像 与自定义头像链接
- 支持多条“固定最后”并保持其余随机排序
- **用户/反馈/评论/文章/友链**:`admin/users.php`、`admin/feedback.php`、`admin/comments.php`、`admin/articles.php`、`admin/links.php`
- **内容编辑体验升级**:`admin/apis.php`、`admin/articles.php`、`admin/pages.php`、`user/api-add.php`、`user/api-edit.php` 已集成 Joe 编辑器,支持浅色/深色主题自适配
### 代理与在线测试
- **API 中转代理**:`proxy.php`
- 路由格式:`/{api_proxy_base_path}/{proxy_path}?query...`
- SSRF 基础防护(禁止内网 IP)
- 传递真实客户端 IP(`X-Forwarded-For` / `X-Real-IP`)
- 记录调用统计(见下方统计)
- **在线测试跨域代理**:`api-proxy.php`
- 高仿浏览器请求头、自动解压(`CURLOPT_ENCODING`)
- SSRF 防护、来源检查、简单频控
### 调用统计
- 统计写入:`core/ApiCallLogger.php`
- `fa_apis.call_count / last_call / heat` 更新
- `fa_api_call_logs` 记录每次调用
- 统计入口:
- 后台统计页:`admin/stats.php`
- 后台控制台趋势与实时日志:`admin/index.php`(依赖前端脚本与 Chart.js)
### 本地接口自动统计
- 目录:`api/`
- 自动钩子:`api/.user.ini` + `api/auto-stats-prepend.php`
- 本地接口文件无需再手动引入 `record.php`,按后台接口配置自动执行守卫与统计
---
## 目录结构(核心)
- `config/`
- `config.php`:系统入口配置、安装检测、资产加载策略、站点配置、注入前端数据
- `database.php`:**不再随仓库提供**,由安装向导自动生成
- `core/`
- `MySQLDB.php`:MySQL 连接与基础 CRUD
- `JsonDB.php`:兼容层(保留旧类名/方法名,底层仅用 MySQL)
- `UserAuth.php`:用户认证/第三方登录/绑定
- `Auth.php`:管理员认证
- `ApiCallLogger.php`:调用统计统一写入(`proxy.php` 与 `api/record.php` 共用)
- `Security.php`:CSRF、过滤与安全工具
- `install/`
- `index.php`:Web 安装向导(5 步)
- `database.sql`:建表结构(安装时自动跳过 INSERT,保证空白库)
- `install.lock`:安装锁(安装完成自动生成;重装需删除)
- `admin/`:后台管理
- `user/`:用户后台
- `assets/`:前端静态资源与本地 vendor
- `docs/`:部署与伪静态文档
---
## 环境要求
- PHP:建议 **7.4+ / 8.x**
- MySQL:建议 **5.7+ / 8.0**
- 扩展:PDO MySQL、cURL、mbstring、openssl(建议)
- Web 服务器:Nginx / Apache 均可
---
## 一键安装(推荐)
1. 上传源码到站点目录(建议网站根目录)。
2. 访问域名首页:
- 若未安装(不存在 `install/install.lock`),会自动跳转到 `/install/`
3. 按向导完成 5 步:
- 服务器检测
- 数据库信息填写(默认 `localhost:3306`,其它为空)
- 检测连接
- 创建数据库表结构(同时生成 `config/database.php`)
- 创建管理员账号
4. 完成后进入后台登录:`/admin/login.php`
更详细说明见:`docs/install-deploy.md`
---
## 版本号规则
版本号采用 `主.中.小`(SemVer)规范,升级规则见:`docs/versioning.md`
---
## 伪静态 / 重写(Nginx 推荐)
FeerApi 使用“通用重写”方案:真实文件优先,其它路径统一交给 `proxy.php` 判断是否为中转接口路径。
推荐规则(完整说明见 `docs/nginx-api-rewrite.md`):
```nginx
location ^~ /install/ {
try_files $uri $uri/ /install/index.php?$query_string;
}
location / {
try_files $uri $uri/ $uri.php?$query_string @feerapi_proxy;
}
location @feerapi_proxy {
rewrite ^ /proxy.php last;
}
```
示例配置文件:
- `nginx.conf.example`
---
## 中转代理使用方式
1. 后台设置 `API 中转代理基础路径`(默认 `apis`)
- 该值对应 `settings.api_proxy_base_path`
2. 为某个 API 设置 `proxy_path`(如 `weather`)
3. 外部访问:
- `https://你的域名/{api_proxy_base_path}/{proxy_path}?city=beijing`
- 例如:`https://example.com/apis/weather?city=beijing`
`proxy.php` 会:
- 根据 `proxy_path` 查找真实 `endpoint`
- 透传请求方法/部分头/请求体
- 记录调用统计
---
## 审核状态与运行状态(重要)
系统将 **审核状态** 与 **运行状态** 分离:
- `review_status`:审核状态(1通过 / 0待审 / -1拒绝)
- `runtime_status`:运行状态(1启用 / 0禁用)
- `maintenance`:维护状态(1维护 / 0正常)
前台展示默认只显示:
- `review_status = 1` 且 `runtime_status = 1` 的接口(见 `core/JsonDB.php` 的 `getApis()`)
---
## 数据库说明
安装时会导入 `install/database.sql` 的表结构。
核心表(节选):
- `fa_admins`:管理员
- `fa_users`:用户
- `fa_apis`:API 主表(包含 `proxy_path`、审核/运行/维护状态、统计字段等)
- `fa_api_call_logs`:调用日志
- `fa_settings`:系统设置
- `fa_categories`:分类
- `fa_articles`:文章
- `fa_links`:友链
- `fa_feedback`:反馈
---
## 本地资源与加载策略
为提升访问速度与稳定性,系统对前端关键依赖采用:
- **本地优先**
- **远程兜底**
- **并行预热**
本地资源位于:`assets/vendor/`
说明见:`assets/vendor/README.md`
---
## 常见问题(FAQ)
### 1. 重新安装怎么做?
- 删除 `install/install.lock`,再访问 `/install/`
### 2. 为什么在线测试/代理会失败?
- 目标接口可能禁止跨域/校验 Referer/Origin(在线测试已尽量模拟浏览器头)
- SSRF 防护会禁止内网地址
- 频控限制:`api-proxy.php` 默认 2 秒内限制同 IP 重复请求
### 3. 为什么某些接口不在前台显示?
检查 `fa_apis`:
- `review_status` 是否为 1
- `runtime_status` 是否为 1
- `maintenance` 是否为 1(维护中会提示不可用)
---
## 安全说明(请务必阅读)
- 系统提供代理与在线测试能力,请务必在生产环境开启必要的访问控制策略。
- `proxy.php` 与 `api-proxy.php` 已做基础 SSRF 防护,但仍建议配合 WAF/网关策略。
- 建议使用 HTTPS 部署,以保证复制、登录等浏览器能力正常。
---
## License / 开源协议
本项目为开源免费项目。首次进入安装向导会弹出“开源部署协议”,请在开源发布前根据你的需求补充仓库 LICENSE 文件与协议内容。
评论 (6)
用户/管理员。后台所有界面均已经重构✌︎˶╹ꇴ╹˶✌︎