必须完成四步闭环操作:启用rest方法识别开关、定义带版本前缀的资源路由、生成符合rest语义的api控制器、用docker compose编排微服务环境,缺一不可。

要让ThinkPHP 8的RESTful API真正响应PUT/DELETE请求、支持版本前缀、自动适配JSON数据格式,并与Nginx/MySQL/Redis等服务解耦运行,必须完成配置开关启用、路由分组定义、控制器生成方式切换、Docker Compose服务编排四步闭环操作。缺一不可,否则API在开发环境就无法被前端正确调用。
启用REST方法识别开关
打开config/route.php文件,找到'rest_action_as_method' => false这一行,将其改为true。
【不改会导致所有PUT/DELETE请求全部404】 ThinkPHP 8默认只按URL路径匹配路由,关闭此开关时,/api/users/123无论用GET还是PUT都会走到同一个方法,框架根本不会检查HTTP动词。
保存后无需重启服务,该配置在每次请求时动态生效。
定义资源路由并添加版本前缀
在app/route/app.php中,不要写Route::resource('v1/users', 'api/UserController')这种硬编码路径。
使用分组前缀方式声明:
Route::prefix('v1')->group(function () {<br> Route::resource('users', 'api/UserController');<br>});
这样生成的路由会自动带上/v1前缀,且保留全部7条规则;若只需标准5条(index/save/read/update/delete),在控制器中只实现这5个public方法即可,create/edit方法不定义也不会报错。
生成符合REST语义的API控制器
执行以下命令生成控制器:
php think make:controller api/UserController --api
该命令会自动创建继承think\Controller的类,并预置index()、read($id)、save()、update($id)、delete($id)五个方法签名——注意不是store/show,这是ThinkPHP 8的强制约定。
在read($id)方法内,直接调用$this->request->param('id')获取路径参数,前提是路由定义为users/:id且参数名一致;若参数名写成users/<strong>{uid}</strong>,则此处必须用param('uid'),否则返回null。
用Docker Compose编排微服务环境
第一步:在项目根目录新建docker-compose.yml,内容如下:
version: '3.8'<br>services:<br> php:<br> build: ./docker/php<br> volumes:<br> - .:/var/www/html<br> nginx:<br> image: nginx:alpine<br> volumes:<br> - .:/var/www/html<br> - ./docker/nginx/conf.d:/etc/nginx/conf.d<br> mysql:<br> image: mysql:8.0<br> environment:<br> MYSQL_ROOT_PASSWORD: root<br> MYSQL_DATABASE: tp8_api
第二步:确保./docker/php/Dockerfile已安装pdo_mysql、opcache、zip等ThinkPHP 8必需扩展。
第三步:执行docker-compose up -d启动全部服务。
第四步:进入php容器执行php think run启动内置服务器——此时Nginx负责静态资源和反向代理,PHP-FPM专注执行逻辑,MySQL独立提供数据服务,三者通过Docker默认网络互通。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











