健康知识 API:分类列表怎么用?先拿分类 ID 再精准筛选
# 健康知识 API:分类列表怎么用?先拿分类 ID 再精准筛选
- **接口/接入点**:健康知识 · 分类列表 `90-86`(免费)
- **请求方式**:POST / GET | **返回格式**:JSON | **鉴权**:URL 携带 `appKey`
- **适用人群**:前端 / 全栈开发者、内容运营 | **阅读时间**:约 6 分钟
## 核心要点
- 分类列表接口无业务参数,返回 `list`:`id`(分类 id)+ `name`(分类名称)。
- `id` 是后续搜索知识接口 `tid` 参数的输入,用来做分类筛选。
- 分类几乎不变,建议在服务端缓存,减少重复调用。
## Why:为什么先取分类
健康内容的典型页面结构是"左侧分类导航 + 右侧内容列表"。分类列表接口正好提供这套导航的底层数据:你拿到 `id` 与 `name` 后,既能在前端渲染分类菜单,又能把用户选中的分类 `id` 透传给搜索知识接口做精准筛选。先取分类,是后续所有内容检索的起点。
## What:接口速览
| 项目 | 说明 |
|------|------|
| 接口地址 | `https://route.showapi.com/90-86?appKey={your_appKey}` |
| 请求参数 | 无业务参数(仅需鉴权 appKey) |
| 返回 | `showapi_res_body.list`:`id`(number)、`name`(string) |
| 超时 | 官方读写超时 5 秒 |
## How:获取分类并驱动前端导航
**Python(requests)**
```python
import requests
APP_KEY = "YOUR_APPKEY"
URL = "https://route.showapi.com/90-86"
resp = requests.post(URL, params={"appKey": APP_KEY}, timeout=10)
data = resp.json()
body = data["showapi_res_body"]
categories = [{"id": c["id"], "name": c["name"]} for c in body["list"]]
# categories 例如:[{"id":103,"name":"综合资讯"},{"id":101,"name":"疾病科普"}]
```
**cURL**
```bash
curl -X POST "https://route.showapi.com/90-86?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded"
```
**Node.js(fetch)**
```javascript
const APP_KEY = "YOUR_APPKEY";
const url = `https://route.showapi.com/90-86?appKey=${APP_KEY}`;
const data = await (await fetch(url, { method: "POST" })).json();
const categories = data.showapi_res_body.list.map((c) => ({ id: c.id, name: c.name }));
```
### 用分类 id 驱动搜索筛选
把用户选中的分类 `id` 作为 `tid` 传入搜索知识接口(详见[搜索知识接入实战](https://www.showapi.com/guides/health-knowledge-search-90)):
```python
# 用户选中了 id=101(疾病科普)
search_url = "https://route.showapi.com/90-87"
resp = requests.post(
search_url,
params={"appKey": APP_KEY},
data={"key": "感冒", "tid": "101", "page": "1"},
timeout=15,
)
```
### 前端导航片段(示意)
```html
<select id="cat">
<!-- options 由 categories 渲染 -->
<option value="101">疾病科普</option>
<option value="103">综合资讯</option>
</select>
```
## 返回示例与解析
```json
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_id": "ce135f6739294c63be0c021b76b6fbff",
"showapi_res_body": {
"list": [
{ "id": 103, "name": "综合资讯" },
{ "id": 101, "name": "疾病科普" }
],
"ret_code": "0"
}
}
```
## 进阶 / 边界
- **缓存分类**:分类列表几乎不变,建议在服务端缓存(如 Redis 或本地内存),按需 1 天刷新一次,既能提速又能省下免费额度(见[免费额度策略](https://www.showapi.com/guides/health-knowledge-free-quota-90))。
- **分类可能变动**:虽然变动频率低,但新增/下架分类时缓存需失效重拉,避免导航与检索不一致。
- **tid 为空**:搜索知识接口 `tid` 不传时按全部分类检索;传具体 `id` 才做分类筛选。
## FAQ
**Q:分类列表需要传任何参数吗?**
A:不需要业务参数,只要鉴权 appKey 即可;文档也仅列了可选的 Header `content-type`,不影响调用。
**Q:分类 id 会变化吗?**
A:通常稳定,但接口未承诺永久不变;建议做服务端缓存并定期刷新,不要在前端硬编码 id。
**Q:拿到分类后怎么用?**
A:把选中的分类 `id` 作为搜索知识接口的 `tid` 参数,即可按分类筛选知识。
**Q:分类列表返回顺序固定吗?**
A:以接口实际返回顺序为准,前端如需固定排序可自行处理。
## 相关能力与下一步阅读
- [健康知识 API:搜索知识接入实战(关键词 / 分类 / 分页)](https://www.showapi.com/guides/health-knowledge-search-90)
- [健康知识 API:5 分钟接入,获取每日健康养生内容](https://www.showapi.com/guides/health-knowledge-quickstart-90)
- [健康知识 API 返回字段全解:分类列表 / 搜索结果 / 知识详情三大结构](https://www.showapi.com/guides/health-knowledge-fields-90)
- **本系列共 12 篇**:查看[健康知识 API 使用指南总目录](https://www.showapi.com/guides/health-knowledge-guides-90)