# 歇后语查询:5 分钟从注册到第一条结果
- **接口/接入点**:歇后语查询 · 1635-1
- **是否免费**:是(注册默认可免费调用,设使用档次限制)
- **请求方式**:POST / GET
- **返回格式**:JSON
- **适用人群**:新注册用户、初级开发者、内容/教育从业者
- **阅读时间**:约 5 分钟
## 核心要点
- 歇后语查询是**免费**接口,只需一个 `num` 参数即可随机返回若干条歇后语。
- 业务数据在 `showapi_res_body.contentlist` 数组里,每条含 `question`(谜面)与 `answer`(谜底)。
- 复制下方任一代码、把 `YOUR_APPKEY` 换成你的 AppKey 即可运行。
## Why:这跟我有什么关系
你可能在做这些事:给公众号每日推一句歇后语、给孩子的国学课出互动题、给海报配一句俏皮话、或者单纯写个小游戏。**这套接口零成本、无需分类参数、无需翻页**,最适合"随机来一句"的轻量场景。注册即免费,先跑通再说。
## What:前置条件与接口速览
| 项 | 值 |
|----|----|
| 接口地址 | `https://route.showapi.com/1635-1?appKey={your_appKey}` |
| 接入点 | 1635-1(默认分组) |
| 请求方式 | POST / GET |
| 鉴权 | AppKey,放 query 参数 `appKey` |
| 请求参数 | `num`(选填,String):随机返回几条,示例 `3` |
| 返回格式 | JSON,业务数据位于 `showapi_res_body` |
| 计费 | 免费,设使用档次限制 |
| 集成能力 | MCP 服务、OpenAPI(YAML/JSON)、多语言示例 |
前置条件:一个 ShowAPI 账号 + 一个 AppKey([控制台获取](https://www.showapi.com/console#/myApp))。
## How:第一次调用
### 步骤 1 — 准备 AppKey
登录 ShowAPI 控制台,复制你的 AppKey。
### 步骤 2 — 发起请求(任选一种)
**Python(requests)**
```python
import requests
url = "https://route.showapi.com/1635-1"
params = {"appKey": "YOUR_APPKEY"}
data = {"num": "3"}
try:
resp = requests.post(url, params=params, data=data, timeout=15)
resp.raise_for_status()
body = resp.json()["showapi_res_body"]
if body.get("ret_code") != "0":
print("接口返回失败:", body.get("remark"))
else:
for item in body["contentlist"]:
print(f"{item['question']} —— {item['answer']}")
except requests.exceptions.RequestException as e:
print("请求异常:", e)
```
**cURL**
```bash
curl -X POST "https://route.showapi.com/1635-1?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "num=3"
```
**Node.js(fetch)**
```javascript
const url = "https://route.showapi.com/1635-1?appKey=YOUR_APPKEY";
const body = new URLSearchParams({ num: "3" });
try {
const resp = await fetch(url, {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
body,
});
const json = await resp.json();
const resBody = json.showapi_res_body;
if (resBody.ret_code !== "0") {
console.error("接口返回失败:", resBody.remark);
} else {
for (const item of resBody.contentlist) {
console.log(`${item.question} —— ${item.answer}`);
}
}
} catch (e) {
console.error("请求异常:", e);
}
```
### 步骤 3 — 解析结果
把 `showapi_res_body.contentlist` 当成数组遍历即可,每条 `question` 是谜面、`answer` 是谜底。
## 返回示例与解析
```json
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_id": "ce135f6739294c63be0c021b76b6fbff",
"showapi_res_body": {
"ret_code": "0",
"remark": "查询成功",
"contentlist": [
{ "question": "八十岁的阿婆", "answer": "老掉牙了" },
{ "question": "刘备摔阿斗", "answer": "收买人心" },
{ "question": "刘阿斗的江山", "answer": "白送" }
],
"maxResult": 20,
"allNum": 19,
"allPages": 1,
"currentPage": 1
}
}
```
| 字段 | 类型 | 说明 |
|------|------|------|
| `showapi_res_body.ret_code` | String | `"0"` 成功,其他为失败 |
| `showapi_res_body.remark` | String | 提示信息,如"查询成功" |
| `showapi_res_body.contentlist` | Array | 歇后语数组,每元素 `{question, answer}` |
| `contentlist[].question` | String | 前半句(描述/谜面) |
| `contentlist[].answer` | String | 后半句(解释/谜底) |
| `maxResult` / `allNum` / `allPages` / `currentPage` | String | 返回体内分页信息字段(详见返回字段全解篇) |
## 进阶 / 边界
- **`num` 不传**:接口可能返回默认条数,建议始终显式传 `num` 以稳定结果。
- **免费限频**:注册默认可免费调用但有使用档次限制,批量场景注意控制频率(见缓存去重篇)。
- **语料有限**:返回体内 `allNum` 示例为 19,说明底层为有限语料库,重复调用可能抽到相同条目(见缓存去重篇处理)。
## FAQ
**Q:AppKey 在哪里获取?**
A:登录 ShowAPI 控制台 → [我的 AppKey](https://www.showapi.com/console#/myApp) 复制即可。
**Q:接口真的免费吗?**
A:是免费服务,注册后默认可免费调用,但设使用档次限制(具体档位以官方 [档位说明](https://www.showapi.com/free-api) 为准)。
**Q:返回的是字符串还是数组?**
A:实际返回中 `contentlist` 是**数组**,每元素含 `question` 与 `answer` 两个字段(OpenAPI YAML 类型标注为 string 是文档小瑕疵,以真实返回为准)。
**Q:一次最多返回几条?**
A:通过 `num` 指定随机返回条数;返回示例里 `maxResult` 为 20,具体上限以接口实际返回为准,不要臆造固定上限。
**Q:GET 和 POST 都能用吗?**
A:都能用。表单场景用 POST(`content-type: application/x-www-form-urlencoded`),简单调试用 GET 把参数拼到 URL 也可。
## 相关能力 / 下一步阅读
- [歇后语查询返回字段全解:contentlist / ret_code / 分页字段一文读懂](https://www.showapi.com/guides/xiehouyu-response-fields-1635)
- [歇后语查询实战:用 num 参数做"每日一语"小程序全链路设计](https://www.showapi.com/guides/xiehouyu-daily-1635)
- **本系列共 13 篇**:查看[歇后语查询指南总目录](https://www.showapi.com/guides/xiehouyu-guides-1635)