内容输出接口
给小程序、APP 与前端框架调用的 HTTP 接口,参数与模板标签保持一致。
基本约定
| 项 | 说明 |
|---|---|
| 前缀 | /api/v1 |
| 返回格式 | {"code":0,"msg":"ok","data":…},code=0 表示成功 |
| 编码 | UTF-8 |
| 鉴权 | 读取类接口默认开放;写入类接口需请求头 X-App-Key |
| 限流 | 默认每 IP 每分钟 120 次,可在后台调整 |
接口和模板用同一套取数逻辑。后台里能看到什么,接口就能取到什么;
模板标签支持哪些筛选参数,接口就支持哪些。不存在"页面能筛、接口不能"的两套规则。
接口一览
| 方法 | 地址 | 说明 |
|---|---|---|
| GET | /api/v1/site | 站点信息(名称、Logo、联系方式等) |
| GET | /api/v1/navs | 导航树(含子栏目) |
| GET | /api/v1/categories | 全部栏目 |
| GET | /api/v1/category/<ID或别名> | 单个栏目 |
| GET | /api/v1/contents | 内容列表(支持全部筛选参数) |
| GET | /api/v1/content/<ID或别名> | 内容详情(含正文、标签、关联) |
| GET | /api/v1/tags | 标签列表 |
| GET | /api/v1/banners | 轮播图 |
| GET | /api/v1/links | 友情链接 |
| GET | /api/v1/docs | 文档目录 / 单篇 |
| POST | /api/v1/form/<表单标识> | 提交表单(需 AppKey) |
内容列表的参数
| 参数 | 说明 |
|---|---|
name / cid | 按栏目别名或 ID |
model | 按内容模型过滤 |
num / page | 每页条数与页码 |
order | sort desc / publish desc / hits desc / id desc |
keyword | 标题与摘要关键词 |
tag | 按标签名 |
withsub | 为 1 时连子栏目与副栏目一起取 |
media | 为 1 时同时返回图集 |
field / op / fvalue | 按自定义字段筛选,如 field=price&op=gt&fvalue=1000 |
调用示例
# 取「新闻」栏目最新 5 条
curl "https://你的域名/api/v1/contents?name=news&num=5&order=publish%20desc"
# 取价格高于 1000 的产品
curl "https://你的域名/api/v1/contents?model=product&field=price&op=gt&fvalue=1000"
# 取内容详情
curl "https://你的域名/api/v1/content/12"
# 提交表单(需 AppKey)
curl -X POST "https://你的域名/api/v1/form/consult" \
-H "X-App-Key: 你的AppKey" \
-d "name=张三&phone=13800000000&need=想了解方案"
返回结构(内容列表)
{
"code": 0,
"msg": "ok",
"data": {
"total": 42,
"page": 1,
"pages": 5,
"num": 10,
"list": [
{
"id": 12,
"cid": 3,
"model": "article",
"title": "标题",
"url": "https://你的域名/detail/12",
"summary": "摘要…",
"thumb": "https://你的域名/uploads/…",
"hits": 128,
"publish_time": "2026-10-04 12:00:00",
"ext": { "source": "本站" }
}
]
}
}
跨域
默认不发送任何跨域响应头,也就是只允许同源页面调用。 H5 页面部署在别的域名时,在后台「站点设置 → 内容输出接口」里把来源填进白名单即可,多个用逗号分隔。
不要图省事填 *:那等于允许任意网站拿着你访客的浏览器去调你的接口。
关于绝对地址
接口返回的图片与链接都是绝对地址。小程序和 APP 没有"当前页面"的概念, 相对路径拿去没法直接用 —— 这是接口与模板在这一点上刻意不同的地方。