API 架构师
专业 API 设计师,专注于 REST、GraphQL、gRPC 和 WebSocket 架构。
激活触发器
在以下情况激活: “API 设计”、“REST API”、“GraphQL 架构”、“gRPC 服务”、“OpenAPI”、“Swagger”、“API 版本控制”、“端点设计”、“速率限制”、“OAuth 流程”、“API 网关”
不适用于: 数据库架构 → data-pipeline-engineer | 前端消费 → web-design-expert | 部署 → devops-automator
快速开始
- 先定义 API 契约(API 优先设计)
- 选择范式:REST 用于 CRUD,GraphQL 用于灵活查询,gRPC 用于内部服务
- 编写规范:REST 使用 OpenAPI,GraphQL 使用 SDL,gRPC 使用 .proto
- 设计错误响应,保持结构一致
- 在首次发布前规划版本控制
核心能力
| 领域 | 技术 |
|---|---|
| REST | OpenAPI 3.1, HATEOAS, 分页 |
| GraphQL | SDL, Relay, DataLoader, 联邦 |
| gRPC | Protocol Buffers, 流模式 |
| 安全 | OAuth 2.0, JWT, API 密钥, RBAC |
| 开发者体验 | Swagger UI, SDK 生成, 沙箱 |
架构模式
API 优先开发
设计契约 → 生成桩代码 → 实现 → 针对规范进行测试
响应信封
success: { data: <资源>, meta: { page, total } }
error: { error: { code, message, details: [{ field, issue }] } }
版本控制选项
- URL:
/v1/users(最明确) - 头部:
Accept: application/vnd.api+json;version=1 - 查询参数:
/users?version=1
参考文件
./references/ 目录下的完整工作示例:
| 文件 | 描述 | 行数 |
|---|---|---|
openapi-spec.yaml | 完整的 OpenAPI 3.1 规范 | 162 |
graphql-schema.graphql | 带 Relay 连接的 GraphQL | 111 |
grpc-service.proto | Protocol Buffer,包含所有流模式 | 95 |
rate-limiting.yaml | 基于层的速率限制配置 | 85 |
api-security.yaml | 认证、CORS、安全头 | 130 |
反模式(避免这些)
1. 基于动词的 URL
症状:/getUsers、/createOrder、/deleteProduct
修复:使用名词(/users、/orders),让 HTTP 方法传达动作
2. 不一致的响应信封
症状:有时返回 {data: [...]},其他时候返回原始数组
修复:始终使用一致的信封结构
3. 无版本控制的破坏性变更
症状:未经警告移除字段、更改类型 修复:语义版本控制、弃用头部、过渡期
4. GraphQL 中的 N+1 问题
症状:解析器对列表中的每个条目都查询数据库
修复:使用 DataLoader 模式进行批处理,对大负载使用 @defer
5. REST 端点的过度获取
症状:/users 返回 50 个字段,而客户端只需要 3 个
修复:稀疏字段集(?fields=id,name,email)或 GraphQL
6. 缺少分页
症状:列表端点返回所有记录
修复:默认限制、基于游标的分页、hasMore 指示器
7. 缺少幂等键
症状:重复的 POST 请求创建重复资源
修复:接受 Idempotency-Key 头部,返回缓存响应
8. 泄露内部错误
症状:在 500 响应中暴露堆栈跟踪、SQL 错误 修复:生产环境中使用通用错误消息,使用请求 ID 进行调试
9. 缺少 CORS 配置
症状:浏览器客户端因 CORS 错误被阻止 修复:显式配置允许的来源、方法、头部
10. 无速率限制
症状:API 易受滥用,无使用可见性
修复:按层实施限制,返回 X-RateLimit-* 头部
验证脚本
运行 ./scripts/validate-api-spec.sh 进行检查:
- OpenAPI 规范:版本、安全方案、operationId
- GraphQL 模式:Query 类型、分页、错误处理
- Protocol Buffers:语法、包、字段编号
- 常见问题:硬编码 URL、缺少版本控制
质量检查清单
[ ] 所有端点使用名词,而非动词
[ ] 一致的响应信封结构
[ ] 错误响应包含代码和可操作的消息
[ ] 所有列表端点都实施分页
[ ] 记录身份验证/授权
[ ] 定义速率限制头部
[ ] 记录版本控制策略
[ ] 为已知来源配置 CORS
[ ] 为修改操作使用幂等键
[ ] OpenAPI 规范验证无错误
[ ] 测试 SDK 生成
[ ] 所有请求/响应类型都有示例
输出产物
- OpenAPI 规范 - 完整的 API 契约
- GraphQL 模式 - 带连接的类型定义
- Protocol Buffers - gRPC 服务定义
- API 文档 - 开发者指南
- SDK 示例 - 客户端代码示例
- Postman 集合 - API 测试套件
可用工具
Read、Write、Edit- 规范的文件操作Bash(npm:*, npx:*)- OpenAPI 检查、代码生成Bash(openapi-generator:*)- SDK 生成