适用场景:哪些需求值得接入随机诗词接口
随机诗词接口的核心价值在于轻量获取高质量的古诗词内容,特别适合那些需要频繁变换诗词文本但又不希望维护庞大本地语料库的应用。以下是一些典型场景:
- 每日一言 / 诗词卡片:在天气App、日记应用或锁屏界面上每天展示一首不同主题的诗词,提升产品文化调性。
- 教育辅助工具:教师或学生可以在学习某个主题(如“四季”、“山水”)时快速获得相关诗词范例,用于课堂讨论或仿写练习。
- 内容填充与测试:在UI原型、演示文稿或自动化测试中需要随机但高质量的占位文本,诗词比普通的Lorem Ipsum更有意义。
- 游戏化设计:诗词接龙、飞花令等小游戏的后端数据源,要求低延迟且能按主题控制难度。
但必须清醒认识到该接口的能力边界:QPS上限为5次/秒,不适合实时对战类游戏的高并发场景;仅支持10种预定义主题(抒情、四季、山水、天气、人物、生活、节日、动物、植物、食物),无法按作者、朝代、字数等更细粒度筛选。因此,如果你的应用需要高吞吐或复杂查询,需要配合本地缓存或搜索服务。
接口能力边界:参数、鉴权与QPS
1. 请求方法及地址
| 项目 | 值 |
|---|---|
| 接口名称 | 随机诗词 (slug: shici) |
| 请求方法 | POST |
| 请求地址 | https://v1.apizero.cn/api/shici |
| 内容类型 | application/json |
| 默认QPS | 5 / 秒 |
2. 鉴权方式
每个请求需要在Header中携带API Key:
X-API-Key: {你的API密钥}密钥获取方式请参考平台文档,本文不展开。注意不要将密钥硬编码在客户端代码中,应通过后端服务转发或环境变量注入。
3. 请求体参数
请求体是一个JSON对象,包含两个可选字段:
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
type | string | 否 | 指定诗词主题,可选值:shuqing,siji,shanshui,tianqi,renwu,shenghuo,jieri,dongwu,zhiwu,shiwu。若不传则随机返回所有主题。 |
action | string | 否 | 固定值"types"时,接口返回当前支持的所有主题列表,不消耗调用额度,适合用于前端动态渲染筛选器。 |
重要边界:type和action互不干扰,但通常只使用其一。若同时传递,action优先级更高(返回类型列表)。
4. 响应结构
成功响应(HTTP 200):
{ "code": 200, "data": { // 诗词内容,字段因实际返回而异,以下为常见字段示例 "title": "望庐山瀑布", "author": "李白", "content": "日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。", "type": "shanshui" }, "message": "success" }注意:data对象的具体字段以接口实际返回为准,上述为基于常见诗词API的合理推测。如果返回空对象{},可能是临时问题,建议查看文档最新定义。
错误响应(如鉴权失败、参数非法):
{ "code": 401, "data": {}, "message": "Unauthorized" }curl 接入:两个可复制示例
示例1:获取随机“山水”类诗词
在终端执行前,请确保已设置环境变量APIZERO_API_KEY或直接替换为真实密钥:
curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type": "shanshui"}' \ "https://v1.apizero.cn/api/shici"示例2:获取支持的主题列表(不消耗额度)
curl -sS \ -X POST \ -H "X-API-Key: $APIZERO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action": "types"}' \ "https://v1.apizero.cn/api/shici"预期返回类似:
{ "code": 200, "data": ["shuqing", "siji", "shanshui", "tianqi", "renwu", "shenghuo", "jieri", "dongwu", "zhiwu", "shiwu"], "message": "success" }Python 代码接入示例
下面是用requests库调用并打印结果的完整函数:
import requests import os import json def get_random_poem(api_key: str, theme: str = None) -> dict: """ 获取随机诗词 :param api_key: API密钥 :param theme: 可选主题,如 "shanshui",不传则随机 :return: 解析后的响应字典 """ url = "https://v1.apizero.cn/api/shici" headers = { "X-API-Key": api_key, "Content-Type": "application/json" } payload = {} if theme: payload["type"] = theme resp = requests.post(url, headers=headers, json=payload) resp.raise_for_status() # 非200会抛出异常 return resp.json() def get_theme_list(api_key: str) -> list: """获取支持的主题列表""" url = "https://v1.apizero.cn/api/shici" headers = { "X-API-Key": api_key, "Content-Type": "application/json" } payload = {"action": "types"} resp = requests.post(url, headers=headers, json=payload) data = resp.json() if data.get("code") == 200: return data.get("data", []) return [] # 使用示例 if __name__ == "__main__": key = os.environ.get("APIZERO_API_KEY", "your-api-key-here") poem = get_random_poem(key, "siji") print(json.dumps(poem, ensure_ascii=False, indent=2))返回值字段解读与错误处理
成功时常见字段
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 状态码,200为成功 |
message | string | 提示信息,“success” |
data | object | 诗词数据,可能包含title、author、content、type等,具体以实际文档为准 |
错误码速查
| HTTP状态码 | 常见原因 | 处理建议 |
|---|---|---|
| 400 | 请求体JSON格式错误或type值非法 | 检查payload语法及主题枚举值 |
| 401 | 缺少或无效的API Key | 确认Header中X-API-Key是否正确 |
| 429 | 超过QPS限制(5/s) | 加入退避重试或限流机制 |
| 5xx | 服务端异常 | 实现指数退避重试,并记录日志 |
工程化注意事项
1. QPS控制与重试
由于接口QPS限制为5,建议在客户端实现令牌桶或漏桶限速。例如,如果每200ms只允许1次请求,即可稳定在5 QPS以下。遇到429或5xx时,使用指数退避重试(第一次等待1秒,第二次2秒,第三次4秒,最多三次)。
2. 缓存策略
对于每日一句等场景,诗词内容不需要实时更新,可以考虑将当天的诗词缓存到本地内存或Redis,过期时间设为24小时。这样即使某次接口失败,用户仍能看到缓存内容,提升可用性。
3. API Key的安全存储
- 前端调用:不建议直接暴露Key,应通过自己的后端代理转发,由后端统一管理Key。
- 后端调用:使用环境变量或密钥管理服务(如Vault)存储,禁止硬编码在代码仓库中。
4. 降级方案
当接口不可用时,应用应能优雅降级。例如:
- 使用本地预置的古典诗词库(如《唐诗三百首》JSON文件)作为备用数据源。
- 在前端显示“今日暂无推荐诗词”等友好提示,而不是报错。
5. 监控与告警
集成Prometheus或其他监控工具,对/api/shici接口的调用成功率和延迟进行打点,当错误率超过阈值(如5%)时触发告警,以便及时排查问题。
参考文档
- 随机诗词 API 官方文档
- 原始 Markdown 文档
本文所有请求参数和响应示例均基于上述文档中的事实卡,使用前请确认文档版本。