REST是一种基于HTTP动词与资源路径的接口风格,清晰、规范、易于扩展。DedeCMS默认并不内置完整REST接口,但可以通过轻量改造,搭建一套符合REST约定的数据服务。本教程讲解设计与调用方法。
一、REST接口核心约定
REST以资源为中心,通过HTTP动词表达操作意图:GET读取、POST新建、PUT更新、DELETE删除。资源路径用名词复数表示,如/articles、/categories。
| 方法 | 路径 | 含义 |
|---|---|---|
| GET | /articles | 文章列表 |
| GET | /articles/12 | 单篇文章 |
| POST | /articles | 新建文章 |
二、路由实现方式
1. 单入口路由
新建api/index.php作为统一入口,解析$_SERVER['REQUEST_URI']与$_SERVER['REQUEST_METHOD'],分发到对应处理函数。伪静态规则将/api/...重写到该入口。
$path=trim($_SERVER['PATH_INFO'] ?? '', '/');
$seg=explode('/', $path);
$method=$_SERVER['REQUEST_METHOD'];
// /articles/12=> $seg=['articles','12']
2. 多文件路由
简单场景也可直接用多文件,如articles.php、category.php,通过?id=区分资源,开发更快但规范度稍弱。
三、资源处理示例
1. 列表资源(GET /articles)
$tid=intval($_GET['typeid'] ?? 0); $sql="SELECT id,title,pubdate FROM dede_archives WHERE arcrank>-2"; if($tid) $sql .=" AND typeid=$tid"; $sql .=" ORDER BY pubdate DESC LIMIT $offset,$pagesize";
2. 单资源(GET /articles/{id})
取到id后联合附加表查询,返回字段需按需裁剪,避免泄露管理员字段。资源不存在时返回404状态码与错误体。
四、状态码与返回结构
REST接口应善用HTTP状态码:200成功、201创建、400参数错误、401未授权、404不存在、500服务器错误。返回体建议统一结构:
{
"code": 0,
"msg": "ok",
"data": { "id": 12, "title": "..." }
}
五、鉴权与安全
- 公开资源GET可不鉴权,但建议加签名防止恶意抓取。
- 写操作(POST/PUT/DELETE)必须鉴权,校验token或管理员身份。
- 所有输入参数强制过滤,杜绝SQL注入与XSS。
- 启用HTTPS,避免传输被窃听篡改。
六、调用示例
1. curl调用
curl -X GET "https://example.com/api/articles?typeid=1&page=1" curl -X GET "https://example.com/api/articles/12"
2. JavaScript调用
fetch('/api/articles/12').then(r=>r.json()).then(d=>console.log(d));
七、使用建议与展望
建议在接口设计阶段就明确资源边界与动词用法,避免后期接口混乱。对于复杂查询(多条件筛选、聚合统计),可在资源下扩展子路径(如/articles/search)。REST风格能让DedeCMS的数据服务更规范、更易对接多端,值得在前端化、小程序化项目中长期投入。