thinkphp实现restful接口需严格遵循mvc对齐:用route::resource()自动生成7条标准路由,控制器方法名与http动词一一对应(如read→get /users/5),put/delete需手动解析原始输入,响应统一json格式并返回准确状态码。

ThinkPHP 使用 MVC 架构设计 RESTful 接口,核心不是堆砌路由或硬写方法,而是让模型、控制器、路由三者严格对齐 REST 原则:资源即 URL、动词即操作、响应即状态。
资源路由必须用 Route::resource() 声明
手动写一堆 GET/POST/PUT 路由会丢失动词绑定、命名路由、参数自动解析等能力。正确做法是在 route/app.php 中直接注册:
-
标准写法:
Route::resource('users', 'api.User');—— 自动生成 7 条标准路由(index/read/create/edit/update/delete/save) -
带版本前缀:
Route::prefix('api/v1')->group(function () { Route::resource('users', 'api.User'); });,避免把版本写进资源名(如'api/v1/users')导致控制器无法识别 -
命名路由:加
->name('api.users'),后续可用url('api.users/read', ['id' => 123])生成规范 URL
控制器方法名与 HTTP 动词必须一一对应
ThinkPHP 不靠注释或配置映射动词,而是靠“方法名 + 请求类型”双重匹配。控制器必须继承 think\Controller(非 BaseController),且方法必须是 public:
- GET /users →
index() - GET /users/5 →
read($id)(TP5/TP8 均用read,不用show) - POST /users →
save()(TP5)或store()(TP6+) - PUT /users/5 →
update($id) - DELETE /users/5 →
delete($id)
写成 show()、destroy() 或漏掉 $id 参数,都会导致 404 或误入 index()。
PUT/DELETE 请求体需手动解析原始输入
不同于 GET 和普通 POST,save()、update()、delete() 方法不会自动调用 $this->request->param()。前端若以 application/json 提交,必须自己读取并解析:
$input = file_get_contents('php://input');$data = json_decode($input, true) ?: [];- 表单提交(
application/x-www-form-urlencoded)可直接用$this->request->post(),但注意 TP6+ 默认 trim 空格,字段含首尾空格需显式处理
响应格式要统一、状态码要准确
RESTful 接口不返回 HTML,而应输出结构化数据并携带语义化状态码。建议封装一个基础响应方法:
- 成功一律返回
200(列表/单条)或201(新建成功) - 资源不存在返回
404,参数错误返回400,未授权返回401 - 响应体统一为 JSON,含
code、msg、data三层结构,单条数据为对象,列表为数组 - 避免在控制器中直接
echo json_encode(),改用return json(['code'=>200, 'msg'=>'ok', 'data'=>$result]);
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











