ThinkPHP6实现RESTful API开发完整教程 – 从入门到实战

2025-08-01 0 690

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);
    }
}

七、最佳实践建议

  1. 使用HTTP状态码正确反映操作结果(200成功、201创建成功、204无内容等)
  2. 统一响应格式,例如:{code: 200, data: [], message: ''}
  3. 生产环境务必开启异常处理,记录错误日志
  4. 使用API文档工具(如Swagger)维护接口文档
  5. 重要操作添加速率限制防止滥用
ThinkPHP6实现RESTful API开发完整教程 - 从入门到实战
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 thinkphp ThinkPHP6实现RESTful API开发完整教程 – 从入门到实战 https://www.taomawang.com/server/thinkphp/719.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务