第1章:API设计基础(API Design Foundations)
一、导读
1.1 本章学习目标
第1章建立 API 设计的基础框架——一致性、向后兼容、版本管理。
本章的核心学习目标包括:
- 理解 API 设计的基本原则
- 掌握一致性的重要性
- 学会向后兼容的设计策略
- 理解版本管理的最佳实践
1.2 为什么本章如此重要
API 是系统之间的契约。一旦发布,修改 API 的成本极高。好的 API 设计能减少未来的痛苦,坏的设计会导致永久的技术债务。
1.3 核心问题引导
API 设计最重要的原则是什么?
如何做到向后兼容?
什么时候需要版本管理?
好的 API 命名有什么特点?
二、核心概念详解
2.1 设计原则
API 设计原则:
1. 一致性:相同的操作使用相同的模式
2. 简单性:减少认知负担
3. 可发现性:通过 API 本身能理解用法
4. 安全性:默认安全,防止常见错误
5. 可扩展性:允许未来添加功能2.2 向后兼容
向后兼容规则:
1. 永远不要删除已有的字段
2. 永远不要改变已有字段的类型
3. 永远不要改变已有字段的行为
4. 新增字段必须是可选的(或有默认值)
5. 新增方法不能影响已有方法
不兼容变更的处理:
- 废弃旧版本,提供迁移期
- 使用版本号区分
- 提供迁移工具2.3 版本管理
版本管理策略:
1. URL 版本:/api/v1/users
- 优点:直观,易于路由
- 缺点:URL 不统一
2. Header 版本:Accept: application/vnd.api.v1+json
- 优点:URL 干净
- 缺点:不够直观
3. 无版本:通过向后兼容避免版本
- 优点:最简单
- 缺点:需要严格遵守兼容规则
推荐:优先向后兼容,必要时使用 URL 版本2.4 命名规范
资源命名:
- 使用复数名词:/users, /orders
- 使用 kebab-case:/order-items
- 避免动词:/users(GET)而不是 /getUsers
字段命名:
- 使用 camelCase:firstName, orderDate
- 保持一致:不要混用 camelCase 和 snake_case
- 使用有意义的名称:userEmail 而不是 email(在嵌套时)三、实战案例
3.1 案例一:设计一个用户管理 API
资源设计:
GET /api/v1/users # 列表
POST /api/v1/users # 创建
GET /api/v1/users/{id} # 获取
PATCH /api/v1/users/{id} # 部分更新
DELETE /api/v1/users/{id} # 删除
请求/响应示例:
POST /api/v1/users
{
"name": "Alice",
"email": "alice@example.com"
}
Response 201:
{
"id": "usr_123",
"name": "Alice",
"email": "alice@example.com",
"createdAt": "2024-01-01T00:00:00Z"
}四、本章小结
设计原则:一致性、简单性、可发现性、安全性、可扩展性。
向后兼容:不删除字段、不改变类型和行为。
版本管理:优先向后兼容,必要时使用 URL 版本。
命名规范:复数名词、camelCase、有意义的名称。
五、思考与练习
设计一个图书管理 API,遵循本章的设计原则。
分析一个你熟悉的 API,找出它的向后兼容问题。
如何在不破坏向后兼容的前提下添加必填字段?