166940d5a6
Made-with: Cursor
322 lines
6.2 KiB
Markdown
322 lines
6.2 KiB
Markdown
# ThinkPHP 8 API 多应用脚手架
|
||
|
||
基于 ThinkPHP 8.1 的 API 接口开发脚手架,采用多应用模式。
|
||
|
||
## 环境要求
|
||
|
||
- PHP >= 8.0
|
||
- Composer
|
||
- MySQL >= 5.7
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
tp/
|
||
├── app/ # 应用目录
|
||
│ ├── api/ # API 应用
|
||
│ │ ├── controller/ # 控制器
|
||
│ │ │ ├── BaseController.php # 基础控制器
|
||
│ │ │ ├── Index.php # 首页控制器
|
||
│ │ │ └── User.php # 用户控制器
|
||
│ │ ├── model/ # 模型
|
||
│ │ ├── validate/ # 验证器
|
||
│ │ ├── middleware/ # 中间件
|
||
│ │ │ ├── Auth.php # 认证中间件
|
||
│ │ │ └── CrossDomain.php # 跨域中间件
|
||
│ │ ├── common/ # 公共类
|
||
│ │ │ └── Response.php # 统一响应类
|
||
│ │ └── AppService.php # 应用服务
|
||
│ └── BaseController.php # 默认基础控制器
|
||
├── config/ # 配置文件
|
||
├── route/ # 路由
|
||
│ └── api.php # API 路由配置
|
||
├── public/ # 公共资源
|
||
├── runtime/ # 运行时目录
|
||
├── vendor/ # Composer 依赖
|
||
├── .env # 环境配置
|
||
├── database.sql # 数据库结构
|
||
└── README.md # 说明文档
|
||
```
|
||
|
||
## 安装步骤
|
||
|
||
### 1. 安装依赖
|
||
|
||
依赖已安装完成,如需更新:
|
||
|
||
```bash
|
||
composer install
|
||
```
|
||
|
||
### 2. 配置环境
|
||
|
||
复制 `.env` 文件并修改数据库配置:
|
||
|
||
```env
|
||
[DATABASE]
|
||
TYPE = mysql
|
||
HOSTNAME = 127.0.0.1
|
||
DATABASE = tp_api
|
||
USERNAME = root
|
||
PASSWORD = your_password
|
||
HOSTPORT = 3306
|
||
CHARSET = utf8mb4
|
||
```
|
||
|
||
### 3. 创建数据库
|
||
|
||
```sql
|
||
CREATE DATABASE tp_api DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
|
||
```
|
||
|
||
导入数据表结构:
|
||
|
||
```bash
|
||
mysql -u root -p tp_api < database.sql
|
||
```
|
||
|
||
### 4. 配置 Web 服务器
|
||
|
||
#### Nginx 配置示例
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name localhost;
|
||
root /path/to/tp/public;
|
||
index index.php index.html;
|
||
|
||
location / {
|
||
if (!-e $request_filename) {
|
||
rewrite ^(.*)$ /index.php?s=/$1 last;
|
||
break;
|
||
}
|
||
}
|
||
|
||
location ~ \.php$ {
|
||
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
|
||
fastcgi_index index.php;
|
||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||
include fastcgi_params;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5. 启动开发服务器
|
||
|
||
```bash
|
||
php think run
|
||
```
|
||
|
||
默认访问地址:http://localhost:8000
|
||
|
||
## API 接口文档
|
||
|
||
### 公共接口(无需认证)
|
||
|
||
#### 1. 首页信息
|
||
- **URL**: `/api/index`
|
||
- **Method**: GET
|
||
- **响应示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"name": "ThinkPHP API",
|
||
"version": "8.1.3",
|
||
"message": "Welcome to ThinkPHP API Application"
|
||
},
|
||
"time": 1640000000
|
||
}
|
||
```
|
||
|
||
#### 2. 健康检查
|
||
- **URL**: `/api/health`
|
||
- **Method**: GET
|
||
- **响应示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"status": "ok",
|
||
"timestamp": "2024-01-01 12:00:00"
|
||
},
|
||
"time": 1640000000
|
||
}
|
||
```
|
||
|
||
#### 3. 用户登录
|
||
- **URL**: `/api/user/login`
|
||
- **Method**: POST
|
||
- **参数**:
|
||
- `username`: 用户名(必填)
|
||
- `password`: 密码(必填)
|
||
- **响应示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "登录成功",
|
||
"data": {
|
||
"token": "example_token_xxx",
|
||
"username": "demo"
|
||
},
|
||
"time": 1640000000
|
||
}
|
||
```
|
||
|
||
#### 4. 用户注册
|
||
- **URL**: `/api/user/register`
|
||
- **Method**: POST
|
||
- **参数**:
|
||
- `username`: 用户名(3-20位)
|
||
- `password`: 密码(6-20位)
|
||
- `email`: 邮箱
|
||
- **响应示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "注册成功",
|
||
"data": {
|
||
"user_id": 1001
|
||
},
|
||
"time": 1640000000
|
||
}
|
||
```
|
||
|
||
### 认证接口(需要 token)
|
||
|
||
#### 5. 获取用户信息
|
||
- **URL**: `/api/user/info`
|
||
- **Method**: GET
|
||
- **Headers**: `token: your_token`
|
||
- **响应示例**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "success",
|
||
"data": {
|
||
"id": 1,
|
||
"username": "demo_user",
|
||
"nickname": "演示用户",
|
||
"avatar": "",
|
||
"email": "demo@example.com",
|
||
"created_at": "2024-01-01 12:00:00"
|
||
},
|
||
"time": 1640000000
|
||
}
|
||
```
|
||
|
||
## 功能特性
|
||
|
||
### 1. 多应用模式
|
||
- 采用 ThinkPHP 多应用扩展
|
||
- API 接口独立目录
|
||
- 便于扩展其他应用模块
|
||
|
||
### 2. 统一响应格式
|
||
```php
|
||
// 成功响应
|
||
return $this->success($data, '操作成功');
|
||
|
||
// 失败响应
|
||
return $this->error('操作失败', 400);
|
||
|
||
// 分页响应
|
||
return Response::paginate($list, $total, $page, $pageSize);
|
||
```
|
||
|
||
### 3. 中间件支持
|
||
- **跨域中间件**: 支持 API 跨域请求
|
||
- **认证中间件**: Token 验证(需自行实现具体逻辑)
|
||
|
||
### 4. 数据验证
|
||
```php
|
||
// 控制器中使用
|
||
$this->validate($data, [
|
||
'username' => 'require|length:3,20',
|
||
'password' => 'require|length:6,20',
|
||
]);
|
||
|
||
// 或使用验证器
|
||
$this->validate($data, 'app\api\validate\User.login');
|
||
```
|
||
|
||
### 5. 模型自动时间戳
|
||
```php
|
||
protected $autoWriteTimestamp = true;
|
||
```
|
||
|
||
## 开发建议
|
||
|
||
### 1. 控制器开发
|
||
- 所有控制器继承 `BaseController`
|
||
- 使用 `$this->success()` 和 `$this->error()` 统一响应
|
||
- 复杂逻辑封装到 Service 层
|
||
|
||
### 2. 模型开发
|
||
- 使用模型关联处理表关系
|
||
- 定义访问器和修改器
|
||
- 使用自动时间戳
|
||
|
||
### 3. 异常处理
|
||
- 使用 try-catch 捕获异常
|
||
- 自定义异常处理类
|
||
- 记录错误日志
|
||
|
||
### 4. API 安全
|
||
- 使用 HTTPS
|
||
- Token 认证机制
|
||
- 参数签名验证
|
||
- 请求频率限制
|
||
|
||
### 5. 性能优化
|
||
- 开启路由缓存
|
||
- 使用缓存减少数据库查询
|
||
- 优化 SQL 查询
|
||
- 使用队列处理耗时任务
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 启动开发服务器
|
||
php think run
|
||
|
||
# 清除缓存
|
||
php think clear
|
||
|
||
# 生成控制器
|
||
php think make:controller api@Demo
|
||
|
||
# 生成模型
|
||
php think make:model api@Demo
|
||
|
||
# 生成验证器
|
||
php think make:validate api@Demo
|
||
```
|
||
|
||
## 扩展安装
|
||
|
||
```bash
|
||
# JWT 认证
|
||
composer require firebase/php-jwt
|
||
|
||
# Redis 缓存
|
||
composer require topthink/think-cache
|
||
|
||
# 队列
|
||
composer require topthink/think-queue
|
||
|
||
# 定时任务
|
||
composer require topthink/think-cron
|
||
```
|
||
|
||
## 许可证
|
||
|
||
Apache 2.0
|
||
|
||
## 联系方式
|
||
|
||
如有问题请提交 Issue 或 PR。
|