本文目录导读:

- 第一阶段:基础与核心操作(必须覆盖)
- 第二阶段:中等复杂场景(覆盖主力用例)
- 第三阶段:进阶与生产模式(体现项目价值)
- 如何组织这些示例?(三层次结构)
- 避免的常见错误(反面教材)
- 一个高质量的API示例清单模板
为开源项目的API设计示例(Examples)时,覆盖常见场景的核心原则是:从“Hello World”到“生产级模式”,你需要确保文档能帮助用户解决“我该怎么做”以及“这样做会出什么问题”的两个关键点。
以下是一套结构化的方法和具体场景清单,适用RESTful、GraphQL、gRPC等常见API类型:
第一阶段:基础与核心操作(必须覆盖)
这是用户快速上手的保障,通常需要3-5个示例。
-
快速开始(最小化示例)
- 场景: 用户只想验证API是否工作,以及认证方式是否正确。
- 示例: 使用
curl或最简代码(Python/JS)发送GET /health或GET /api/v1/items?limit=1,并附带AuthorizationHeader。 - 关键点: 包含API密钥或Token的获取方式,以及返回的JSON结构。
-
CRUD(增删改查)操作
- 场景: 最通用的数据操作需求。
- 示例:
- 创建:
POST /users包含 body{"name": "example", "email": "..."}。建议同时展示成功(201)和校验失败(400)的响应。 - 查询: 带分页(
?page=1&size=20)和过滤(?status=active)的GET。 - 更新: 区分
PUT(全量替换)与PATCH(部分更新),并用注释说明差异。 - 删除:
DELETE /users/{id},展示返回 204 或 200 + deleted object 的区别。
- 创建:
-
错误处理(防雷示例)
- 场景: 用户遇到报错时如何排查。
- 示例: 展示常见的错误码:
401(未授权/Token过期) +WWW-AuthenticateHeader。404(资源未找到) vs403(权限不足)。422(表单校验失败:字段名、具体错误原因)。429(限流,包含Retry-AfterHeader)。
第二阶段:中等复杂场景(覆盖主力用例)
这些是用户最常搜索的“实际应用”场景。
-
认证与授权
- 场景: 多用户系统或服务间调用。
- 示例:
- OAuth 2.0授权码流程: 从“点击登录”到“获取access_token”再到“刷新token”的完整交互步骤。
- 服务账户/API Keys: 如何在Header或Query参数中传递。
- 权限微调: 如
scope=read_orders write_inventory的用法。
-
批量操作与高性能
- 场景: 数据处理、导入导出。
- 示例:
- 批量创建:
POST /batch/products一次提交10条数据。 - 异步任务: 提交任务 -> 返回
202 Accepted+Location: /tasks/123-> 再通过GET /tasks/123轮询状态(或提供Webhook回调的示例)。
- 批量创建:
-
搜索与排序
- 场景: 用户查找特定内容。
- 示例:
- 全文本搜索:
?q=keyword&fields=name,description。 - 复杂过滤:
?created_at[gte]=2023-01-01&price[between]=10,100。 - 排序:
?sort=-created_at,title(负号表示降序)。
- 全文本搜索:
第三阶段:进阶与生产模式(体现项目价值)
这是让用户信任你的项目“足够成熟”的关键。
-
分页与游标
- 场景: 处理大数据集。
- 示例: 对比基于页码(
page=1,缺点:数据变动时重复或遗漏)和基于游标(cursor=eyJpZCI6MTB9,优点:稳定)的两种分页实现,并解释如何构造下一页的nextURL。
-
数据关系与嵌套资源
- 场景: 复杂业务模型(如订单中有商品)。
- 示例:
- 包含子资源:
GET /orders/123?include=items,customer(展示预加载的语法)。 - 创建关联资源: 如先创建user,再创建user下的address:
POST /users/123/addresses。
- 包含子资源:
-
重试与幂等性
- 场景: 支付、订单创建等敏感操作。
- 示例: 创建订单时带上
Idempotency-Key: uuid,展示若网络超时后重试,系统不会创建重复订单(返回相同ID)。
-
Webhook / 事件驱动
- 场景: 实时通知。
- 示例:
- 订阅:
POST /webhooks设置URL和监听的事件(如order.completed)。 - 验证签名: 展示如何验证接收到的Webhook请求的签名(HMAC或JWT),以防伪造。
- 订阅:
-
多语言SDK示例
- 场景: 主流用户群体(前端、后端、移动端)。
- 策略: 对于热门语言(Python, JavaScript, Go, Java),为每个上述场景直接嵌入代码片段,对于较少用的语言,至少提供
curl示范。推荐使用“Tab切换”UI,让用户一键切换语言。
如何组织这些示例?(三层次结构)
不要把所有示例平铺在一起,建议采用渐进式结构:
-
顶层:快速开始
- 包含“Hello World”和“认证”两个基本示例。
- 放在README或文档首页。
-
中层:场景指南(Guides)
- 按上述“第一阶段-第二阶段”为知识点,编写完整的“How-to”文章。
- 一篇名为 “如何创建并查询用户的订单” 的指南,它会串起
POST /users->POST /users/{id}/orders->GET /orders?include=items。
-
底层:API引用中的Inline例子
- 在每个API端点详细说明中,直接嵌入2-4个例子:
- 1个标准请求:
curl+ 1种常见语言。 - 1个完整响应: 包括Header和Body(JSON)。
- 1个错误响应: 常见的
400或404示例。
- 1个标准请求:
- 在每个API端点详细说明中,直接嵌入2-4个例子:
避免的常见错误(反面教材)
- 只展示成功路径: 用户最常遇到的是失败,务必展示
400,401,429等错误。 - 使用无意义的占位符: 用
YOUR_API_KEY而不是your-api-key-here(加真实前缀如sk_test_...会被误认为是实际密文)。 - 缺少上下文: 只给代码,不解释这是什么场景(“这段代码在处理支付退款”比“以下是删除资源”好)。
- 代码不可直接运行: 假设用户已安装所有依赖,示例应该尽量简单,用
axios而不是复杂的fetch封装。
一个高质量的API示例清单模板
当别人问你“这个API的示例覆盖全面吗?”,你可以用这个清单快速评估:
- [ ] 有一个curl和至少一种主流语言的“Hello World”。
- [ ] 有增删改查(CRUD)的完整Request/Response示例。
- [ ] 有分页、排序、过滤的实际URL构造示例。
- [ ] 有至少三种常见错误(401, 404, 422)的响应体展示。
- [ ] 有处理异步任务(轮询/callback)的示例。
- [ ] 有包含关联数据(如orders with items)的复杂查询示例。
- [ ] 有幂等性/重试机制的说明。
- [ ] 有Webhook签名验证的示例(如果提供Webhook)。
- [ ] 有在文档页面内可直接复制运行的代码块。
按照这个结构,你的API示例就能从“能用”升级到“好用”。