ThinkPHP6实现RESTful API开发完整教程
一、环境准备与项目创建
首先确保已安装PHP7.1+和Composer,然后执行以下命令创建项目:
composer create-project topthink/think tp6-api
cd tp6-api
安装完成后,配置数据库连接信息(config/database.php):
'connections' => [
'mysql' => [
'hostname' => '127.0.0.1',
'database' => 'api_demo',
'username' => 'root',
'password' => '',
// ...其他配置保持默认
]
]
二、创建RESTful资源控制器
使用命令行生成文章资源控制器:
php think make:controller api/Article --api
这将在app/controller/api目录下生成专为API设计的控制器:
<?php
namespace appcontrollerapi;
use thinkRequest;
use appmodelArticle as ArticleModel;
class Article
{
// 获取文章列表
public function index()
{
return json(ArticleModel::select());
}
// 获取单个文章详情
public function read($id)
{
return json(ArticleModel::find($id));
}
// 创建新文章
public function save(Request $request)
{
$data = $request->post();
$article = ArticleModel::create($data);
return json($article, 201);
}
// 更新文章
public function update(Request $request, $id)
{
$data = $request->put();
ArticleModel::update($data, ['id' => $id]);
return json(['message' => '更新成功']);
}
// 删除文章
public function delete($id)
{
ArticleModel::destroy($id);
return json(['message' => '删除成功'], 204);
}
}
三、数据库迁移与模型创建
1. 创建文章表迁移文件:
php think make:migration CreateArticleTable
编辑生成的迁移文件:
<?php
use thinkmigrationMigrator;
class CreateArticleTable extends Migrator
{
public function change()
{
$table = $this->table('article');
$table->addColumn('title', 'string', ['limit' => 100])
->addColumn('content', 'text')
->addColumn('create_time', 'datetime')
->addColumn('update_time', 'datetime')
->create();
}
}
执行迁移:php think migrate:run
2. 创建文章模型:
php think make:model Article
编辑模型文件(app/model/Article.php):
<?php
namespace appmodel;
use thinkModel;
class Article extends Model
{
// 自动时间戳
protected $autoWriteTimestamp = 'datetime';
// 创建时间字段
protected $createTime = 'create_time';
// 更新时间字段
protected $updateTime = 'update_time';
}
四、路由配置
编辑route/app.php配置API路由:
<?php
use thinkfacadeRoute;
// 文章资源路由
Route::resource('article', 'api/Article');
// 可选:API版本控制
Route::group('v1', function(){
Route::resource('article', 'api.v1/Article');
});
五、接口测试
使用Postman测试API接口:
- GET /article – 获取文章列表
- POST /article – 创建新文章(需传title和content参数)
- GET /article/1 – 获取ID为1的文章详情
- PUT /article/1 – 更新ID为1的文章
- DELETE /article/1 – 删除ID为1的文章
六、进阶功能实现
1. 数据验证
创建验证器app/validate/Article.php:
<?php
namespace appvalidate;
use thinkValidate;
class Article extends Validate
{
protected $rule = [
'title|标题' => 'require|max:100',
'content|内容' => 'require'
];
}
在控制器中使用:
public function save(Request $request)
{
$data = $request->post();
validate(appvalidateArticle::class)->check($data);
// ...后续处理
}
2. JWT认证集成
安装JWT扩展:composer require firebase/php-jwt
创建中间件处理认证:
<?php
namespace appmiddleware;
use FirebaseJWTJWT;
use FirebaseJWTKey;
class JwtAuth
{
public function handle($request, Closure $next)
{
$token = $request->header('Authorization');
if (!$token) {
return json(['error' => 'Token缺失'], 401);
}
try {
$decoded = JWT::decode($token, new Key(config('jwt.key'), 'HS256'));
$request->user = $decoded;
} catch (Exception $e) {
return json(['error' => 'Token无效'], 401);
}
return $next($request);
}
}
七、最佳实践建议
- 使用HTTP状态码正确反映操作结果(200成功、201创建成功、204无内容等)
- 统一响应格式,例如:
{code: 200, data: [], message: ''}
- 生产环境务必开启异常处理,记录错误日志
- 使用API文档工具(如Swagger)维护接口文档
- 重要操作添加速率限制防止滥用