赞片CMSRESTful
学完这篇你能把赞片CMS的接口改成 RESTful 风格,并用 curl 或 Postman 调通视频内容的增删改查。下面以赞片CMS 1.2.x(后台底部可见版本号)为例,内核按常见的 ThinkPHP 5.1 结构说明。
第一步:确认版本、入口和 API 目录
这一步要确认你的赞片CMS版本和接口文件位置,做完后你知道该改哪个文件。登录后台地址通常是 /admin.php,输入管理员账号、密码,点击「登录」。登录后看页面底部版本号,确认是 1.2.x。服务器上用 SSH 进入网站根目录,执行:
ls application/api/controller
ls route
如果能看到 application/api/controller 和 route/route.php,说明是 ThinkPHP 路由结构,可以继续。
注意:如果根目录没有
application,而是app,说明版本结构不同,把后文路径里的application换成app。
第二步:打开后台 API 开关并配置伪静态
这一步要让赞片CMS允许 API 访问,并让 /api/v1/videos 这类地址能进到入口文件。后台左侧菜单进入「系统」→「系统设置」→「接口设置」,把「API总开关」设为「开启」,「默认返回格式」设为「JSON」,「Token鉴权」设为「开启」,点击「保存」。Nginx 站点配置里加入:
location /api/ {
try_files $uri $uri/ /index.php?$query_string;
}
改完执行 nginx -t,通过后 systemctl reload nginx。
注意:Apache 环境要在
.htaccess里加RewriteRule ^api/(.*)$ index.php?r=api/$1 [QSA,PT,L],并确认AllowOverride All已开启。
第三步:添加 RESTful 路由
这一步把 HTTP 方法和控制器动作对应起来,做完后 GET、POST、PUT、DELETE 会走不同方法。编辑 route/route.php,加入:
Route::get('api/v1/videos', 'api/v1.Video/index');
Route::get('api/v1/videos/:id', 'api/v1.Video/read');
Route::post('api/v1/videos', 'api/v1.Video/save');
Route::put('api/v1/videos/:id', 'api/v1.Video/update');
Route::delete('api/v1/videos/:id', 'api/v1.Video/delete');
第四步:写控制器并返回 JSON
这一步新建 RESTful 控制器,做完后每个接口都有统一返回格式。新建 application/api/controller/Video.php:
<?php
namespace app\api\controller;
use think\facade\Request;
use think\facade\Db;
class Video
{
public function index()
{
$list = Db::name('video')->page(input('page',1),20)->select();
return json(['code'=>0,'msg'=>'ok','data'=>$list]);
}
public function read($id)
{
$row = Db::name('video')->find($id);
if(!$row) return json(['code'=>404,'msg'=>'not found'],404);
return json(['code'=>0,'msg'=>'ok','data'=>$row]);
}
public function save()
{
$data = json_decode(file_get_contents('php://input'), true);
$id = Db::name('video')->insertGetId($data);
return json(['code'=>0,'msg'=>'created','data'=>['id'=>$id]],201);
}
public function update($id)
{
$data = json_decode(file_get_contents('php://input'), true);
Db::name('video')->where('id',$id)->update($data);
return json(['code'=>0,'msg'=>'updated']);
}
public function delete($id)
{
Db::name('video')->delete($id);
return json(null,204);
}
}
注意:PHP 不会自动解析 PUT/DELETE 的 JSON 请求体,必须用
file_get_contents('php://input')读原始数据。
第五步:用 curl 测试
这一步验证接口是否通。先取列表:
curl -H "X-Token: 你的token" http://你的域名/api/v1/videos
新增:
curl -X POST -H "Content-Type: application/json" -H "X-Token: 你的token" \
-d '{"title":"测试视频","cid":1}' http://你的域名/api/v1/videos
更新和删除:
curl -X PUT -H "Content-Type: application/json" -H "X-Token: 你的token" \
-d '{"title":"新标题"}' http://你的域名/api/v1/videos/10
curl -X DELETE -H "X-Token: 你的token" http://你的域名/api/v1/videos/10
如果返回 {"code":0,"msg":"ok"},说明 RESTful 已生效。
第六步:处理鉴权、跨域和状态码
这一步让接口更规范。鉴权放在公共控制器或中间件里,读取 Request::header('x-token'),和后台「接口设置」里的 Token 对比,不一致返回 401。跨域响应头加:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Token,Content-Type');
header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS');
状态码建议:200 查询/更新成功,201 创建成功,204 删除成功,400 参数错误,401 未鉴权,404 资源不存在,500 服务器错误。
注意:如果浏览器发 OPTIONS 预检返回 404,要在路由最前面加
Route::options('api/v1/videos', function(){ return response('',204); });。
小结
- 赞片CMS 1.2.x 改 RESTful,核心是伪静态、路由、控制器、JSON 返回四件事。
- 后台「系统」→「系统设置」→「接口设置」里打开 API 总开关和 Token 鉴权。
- GET/POST/PUT/DELETE 分别对应查、增、改、删,路由写在
route/route.php。 - PUT/DELETE 的 JSON 体要用
php://input读取。 - 记得配 CORS 和正确的 HTTP 状态码,方便前端和 App 接入。
原文链接:https://www.gj0.com/thread-686.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。