classifyId 到底怎么用?药品分类 Id 的必填规则与排查
# classifyId 到底怎么用?药品分类 Id 的必填规则与排查
- **接口/接入点**:药品信息查询(apiCode=1468)· 1468-1 / 1468-2 / 1468-3
- **是否免费**:免费(有档位限制)
- **请求方式**:POST / GET
- **返回格式**:JSON
- **适用人群**:中高级开发者
- **阅读时间**:约 4 分钟
## 核心要点
- `classifyId` 来自 1468-1 药品分类接口的 `data[].classifyId`,是「药品小分类」的唯一 Id。
- 它在三个接入点规则不同:**1468-2 必填**;**1468-3 在 searchType=1/2 时必填**;1468-1 不产生、1468-4 不需要。
- 排查「查不到」时优先核对 classifyId 是否来自 1468-1 真实返回值,且用 Id 而非名称。
## Why:为什么 classifyId 容易踩坑
小分类名称(`classify`)会跨大分类重复(多个大分类下都可能有「头痛」),用名称定位必然出错;而 `classifyId` 唯一。很多工单都源于「拿错 Id」或「该传没传」。
## What:三个接入点的 classifyId 规则
| 接入点 | classifyId 规则 |
|------|------|
| 1468-1 药品分类 | 不产生;其返回 `data[]` 即 classifyId 的来源 |
| 1468-2 药品信息 | **必填** |
| 1468-3 药品详细信息 | searchType=1/2 时**必传**;3/4 时可不传 |
| 1468-4 药名查询 | 不需要 |
## How:正确获取与使用
```python
import requests
APPKEY = "YOUR_APPKEY"
# 从 1468-1 取真实 classifyId(不要用写死的名称)
cats = requests.get(f"https://route.showapi.com/1468-1?appKey={APPKEY}", timeout=10) \
.json()["showapi_res_body"]["data"]
by_id = {c["classifyId"]: c for c in cats}
# 1468-2 必填
cid = "599ad2a0600b2149d689b75a"
r2 = requests.post("https://route.showapi.com/1468-2",
data={"appKey": APPKEY, "classifyId": cid, "page": "1"}, timeout=10)
print(r2.json()["showapi_res_body"]["count"])
# 1468-3 searchType=1/2 必传
r3 = requests.post("https://route.showapi.com/1468-3",
data={"appKey": APPKEY, "searchType": "1", "searchKey": "布洛芬片",
"classifyId": cid, "page": "1"}, timeout=10)
print(r3.json()["showapi_res_body"].get("drugList"))
```
## 返回示例与解析
1468-1 返回示例:`{ "class": "感冒发热", "classify": "头痛", "classifyId": "599ad27f600b2149d689b5c4" }`。请缓存这层映射,业务侧只存 `classifyId`。
## 进阶 / 边界
- 不要假设 `classifyId` 是连续数字——它是类似 `599ad27f...` 的哈希串,必须动态取自 1468-1。
- 1468-2 每次只接受一个 classifyId;多分类需循环(注意免费档位,见[缓存策略](https://www.showapi.com/guides/drug-info-cache-1468))。
## FAQ
**Q1:1468-3 不传 classifyId 报错吗?**
A:文档规定 searchType=1/2 时必传;searchType=3/4(药准字号/药品Id)可不传。是否显式报错取决于服务端,生产环境建议按规则传全。
**Q2:classifyId 能写死在代码里吗?**
A:不建议。它是数据侧 Id,可能随数据源调整;应从 1468-1 动态获取并缓存。
**Q3:为什么我用 classifyId 查到的药品和预期分类对不上?**
A:多半是拿了重复 `classify` 名对应的错误 Id。用 `classifyId` 唯一值定位,并核对 `class`(大分类)。
## 相关能力 / 下一步阅读
- [药品分类查询实战:用 classifyId 层层下钻到具体药品](https://www.showapi.com/guides/drug-info-classification-1468)
- [药品详细信息检索:searchType 四种类型与 classifyId 必填规则](https://www.showapi.com/guides/drug-info-detail-search-1468)
- [免费档位限制下,如何设计缓存策略批量同步药品数据?](https://www.showapi.com/guides/drug-info-cache-1468)
- **本系列共 11 篇**:查看[药品信息查询指南总目录](https://www.showapi.com/guides/drug-info-guides-1468)