谜语大全 API 接入教程:随机查询与分页列表实践
适用场景
谜语接口在内容类应用中应用广泛,例如:
- 微信公众号或聊天机器人中提供每日谜语互动
- 教育类 App 中添加猜谜环节,提升用户参与度
- 互动网站中集成“今日谜语” Widget
- 游戏化营销活动中的随机谜语出题
本文围绕「谜语大全」API 展开,该接口提供三种查询模式,可灵活满足随机或结构化的谜语需求。
接口能力边界
| 特性 | 说明 |
|---|---|
| 请求方式 | POST |
| 基准 URL | https://v1.apizero.cn/api/riddle |
| 请求体格式 | JSON |
| 鉴权方式 | 请求头X-API-Key |
| 速率限制(QPS) | 5 次/秒 |
| 支持模式 | random(随机一条)、list(分页列表)、types(获取所有类型) |
注意:官方文档中未承诺更高级别的 SLA,实际调用时请做好重试与降级策略。
鉴权与请求头
每次请求需在 HTTP Header 中携带 API Key,格式如下:
X-API-Key: 您的密钥 Content-Type: application/jsonAPI Key 需提前从 API 管理后台获取(具体获取方式以平台指引为准)。切勿将密钥硬编码在公开代码仓库中,建议使用环境变量注入。
请求参数详解
请求体为 JSON 对象,各字段说明如下:
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
action | string | 否 | "random" | 可选值:"random"、"list"、"types" |
type | string | 否 | 无 | 仅list模式有效,小写字母表示谜语类型(如"animal"、"idiom") |
page | string | 否 | "1" | 仅list模式有效,正整数页码 |
action 模式说明
- random:随机返回一条谜语,忽略
type与page参数。 - list:按类型(可选)分页返回多条谜语。若不传
type,返回所有类型混排。 - types:返回该接口支持的所有谜语类型列表(如动物、成语、字谜等)。此模式下忽略
type与page。
curl 接入示例
以下三个示例分别演示三种模式,请将$APIZERO_API_KEY替换为您的真实密钥。
1. 随机一条谜语
curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action": "random"}' \ "https://v1.apizero.cn/api/riddle"2. 分页列表(查看第 1 页,类型不限)
curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action": "list", "page": "1"}' \ "https://v1.apizero.cn/api/riddle"3. 获取所有谜语类型
curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action": "types"}' \ "https://v1.apizero.cn/api/riddle"以上命令均返回 JSON 格式响应,可使用jq格式化输出:curl ... | jq .
Python 代码示例(requests 库)
假设API_KEY已从环境变量RIDDLE_API_KEY读取,示例代码如下:
import os import requests API_URL = "https://v1.apizero.cn/api/riddle" API_KEY = os.environ.get("RIDDLE_API_KEY") headers = { "X-API-Key": API_KEY, "Content-Type": "application/json" } # 随机一条 def get_random_riddle(): payload = {"action": "random"} resp = requests.post(API_URL, json=payload, headers=headers) return resp.json() # 分页列表 def get_riddle_list(page=1, riddle_type=None): payload = {"action": "list", "page": str(page)} if riddle_type: payload["type"] = riddle_type resp = requests.post(API_URL, json=payload, headers=headers) return resp.json() # 获取所有类型 def get_riddle_types(): payload = {"action": "types"} resp = requests.post(API_URL, json=payload, headers=headers) return resp.json() if __name__ == "__main__": # 示例调用 print("Random riddle:", get_random_riddle()) print("Page 1 list:", get_riddle_list()) print("All types:", get_riddle_types())注意:生产环境中应添加超时(timeout=10)和异常捕获。
响应结构解读
所有正常响应均遵循以下外层结构:
{ "code": 200, "message": "success", "data": { ... } }code:业务状态码(非 HTTP 状态码),200 表示成功,其他值表示错误。message:状态说明字符串。data:具体数据对象,随action模式不同而不同。
不同模式下的 data 字段
random 模式
返回一个谜语对象,常见字段如下(以官方文档为准):
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 谜语 ID |
question | string | 谜面 |
answer | string | 谜底 |
type | string | 谜语类型(小写) |
create_time | string | 创建时间 |
示例:
{ "code": 200, "message": "success", "data": { "id": 12345, "question": "头戴红帽子,身穿白袍子,走路像公子,说话像猴子。(打一动物)", "answer": "鹅", "type": "animal", "create_time": "2025-01-01 12:00:00" } }list 模式
data 为分页对象:
{ "code": 200, "message": "success", "data": { "total": 500, "page": 1, "size": 20, "items": [ { "id": 1, "question": "...", "answer": "...", "type": "..." } // ... ] } }total:符合条件的总条数page:当前页码size:每页条数(固定值,以文档为准)items:谜语对象数组
types 模式
data 为类型字符串数组:
{ "code": 200, "message": "success", "data": ["animal", "idiom", "character", "misc"] }注意:以上字段仅为常见示例,实际返回可能有所不同,请以接口返回为准。
错误处理与常见错误码
| HTTP 状态码 | 业务 code | 说明 | 处理建议 |
|---|---|---|---|
| 200 | 200 | 成功 | 正常解析 data |
| 200 | 400 | 参数错误(如 action 值非法) | 检查请求体格式 |
| 200 | 401 | API Key 无效或缺失 | 检查请求头 X-API-Key |
| 200 | 429 | 超过 QPS 限制(5 次/秒) | 添加重试间隔(如指数退避) |
| 200 | 500 | 服务器内部错误 | 稍后重试,若持续则反馈官方 |
| 4xx/5xx | - | 网络级错误 | 捕获异常,记录日志 |
最佳实践:
- 解析
code而非仅依赖 HTTP 状态码(所有业务响应均为 200)。 - 实现重试逻辑:遇到 429 至少等待 1 秒再试;500 等临时错误可重试 2-3 次。
工程化注意事项
- 密钥管理:使用环境变量(如
.env文件)或密钥管理服务,禁止硬编码。 - 限流处理:QPS 5,建议在客户端加令牌桶限流,避免程序过快调用触发 429。
- 缓存策略:对于 list 模式的分页数据,可设置短时缓存(如 60 秒),减少重复请求。types 模式可缓存更长时间(如 1 小时)因为类型列表变动极低。
- 日志与监控:记录每次请求的 URL、耗时、状态码,便于排查问题。
- 接口变更:定期检查官方文档(
https://apizero.cn/aidocs/riddle)获取更新。 - 备用方案:若接口临时不可用,可准备本地谜语库作为降级。
参考文档
- 官方文档页:https://apizero.cn/aidocs/riddle
- 原始接口定义:https://apizero.cn/aidocs/riddle/raw.md
