赞片CMSRESTful

juming
juming 初级会员超兽战士
发布于 2026-10-08 02:13 ·1 浏览 ·0 回复

学完这篇你能把赞片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 接入。
版权声明:本文来自 GJ站长论坛《赞片CMSRESTful》
原文链接:https://www.gj0.com/thread-686.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~