api-designer
SKILL.md
API 设计专家
设计开发者友好、可扩展的 REST 和 GraphQL API,提供完整的 OpenAPI 规范。
核心工作流
- 分析领域 — 理解业务需求、数据模型、客户端需求
- 资源建模 — 识别资源、关系、操作
- 设计端点 — 定义 URI 模式、HTTP 方法、请求/响应 Schema
- 编写规范 — 创建 OpenAPI 3.1 规范文档
- 规划演进 — 设计版本策略、废弃策略、向后兼容
使用内置工具
read_file— 阅读现有 API 代码和路由定义grep— 搜索现有端点、路由注册、中间件create_file_or_folder+rewrite_file— 创建 OpenAPI YAML/JSON 规范文件create_document— 生成 Word/PDF 格式的 API 设计文档run_command— 运行 API 验证工具(npx @redocly/cli lint)edit_file— 修改路由、控制器、Schema 代码
REST API 设计规范
URI 命名约定
✅ 正确 ❌ 错误
GET /api/v1/users GET /api/v1/getUsers
GET /api/v1/users/{id} GET /api/v1/user/getById/{id}
POST /api/v1/users POST /api/v1/createUser
PUT /api/v1/users/{id} POST /api/v1/updateUser
DELETE /api/v1/users/{id} POST /api/v1/deleteUser
GET /api/v1/users/{id}/orders GET /api/v1/getUserOrders
规则:
- 使用名词(资源),不用动词
- 使用复数形式(
/users而非/user) - 使用 kebab-case(
/user-profiles而非/userProfiles) - 嵌套资源表达从属关系(
/users/{id}/orders) - 最多两层嵌套
HTTP 方法语义
| 方法 | 用途 | 幂等 | 安全 | 请求体 |
|---|---|---|---|---|
| GET | 获取资源 | ✅ | ✅ | 无 |
| POST | 创建资源 | ❌ | ❌ | 有 |
| PUT | 全量替换 | ✅ | ❌ | 有 |
| PATCH | 部分更新 | ❌ | ❌ | 有 |
| DELETE | 删除资源 | ✅ | ❌ | 无 |
HTTP 状态码
| 状态码 | 含义 | 使用场景 |
|---|---|---|
| 200 | OK | GET/PUT/PATCH 成功 |
| 201 | Created | POST 创建成功 |
| 204 | No Content | DELETE 成功 |
| 400 | Bad Request | 请求参数验证失败 |
| 401 | Unauthorized | 未认证 |
| 403 | Forbidden | 已认证但无权限 |
| 404 | Not Found | 资源不存在 |
| 409 | Conflict | 资源冲突(如唯一键) |
| 422 | Unprocessable | 业务逻辑验证失败 |
| 429 | Too Many Requests | 触发速率限制 |
| 500 | Server Error | 服务器内部错误 |
错误响应格式(RFC 7807)
{
"type": "https://api.example.com/errors/validation",
"title": "Validation Error",
"status": 400,
"detail": "邮箱格式不正确",
"instance": "/api/v1/users",
"errors": [
{
"field": "email",
"message": "必须是有效的邮箱地址",
"code": "INVALID_FORMAT"
}
]
}
分页模式
游标分页(推荐)
// 请求: GET /api/v1/users?cursor=abc123&limit=20
{
"data": [...],
"pagination": {
"next_cursor": "def456",
"has_more": true,
"limit": 20
}
}
偏移分页
// 请求: GET /api/v1/users?page=2&per_page=20
{
"data": [...],
"pagination": {
"page": 2,
"per_page": 20,
"total": 150,
"total_pages": 8
}
}
| 方式 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 游标 | 性能好、无跳页问题 | 不能跳到任意页 | 无限滚动、实时数据 |
| 偏移 | 可跳页、直观 | 大偏移量性能差 | 管理后台、固定列表 |
过滤与排序
GET /api/v1/users?status=active&role=admin # 过滤
GET /api/v1/users?sort=-created_at,name # 排序(-表示降序)
GET /api/v1/users?fields=id,name,email # 字段选择
GET /api/v1/users?q=张三 # 搜索
版本策略
| 策略 | 示例 | 优势 | 劣势 |
|---|---|---|---|
| URL 路径 | /api/v1/users |
最直观、易于路由 | URL 变化 |
| 请求头 | Accept: application/vnd.api+json;version=1 |
URL 不变 | 不便调试 |
| 查询参数 | /api/users?version=1 |
简单 | 缓存困难 |
推荐: URL 路径版本(/api/v1/),最广泛使用且最易理解。
认证模式
JWT Bearer Token
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
流程:
1. POST /api/v1/auth/login → 返回 access_token + refresh_token
2. 后续请求携带 Authorization: Bearer {access_token}
3. 过期后 POST /api/v1/auth/refresh → 新的 access_token
API Key
X-API-Key: sk_live_abc123
适用: 服务间通信、第三方集成
OpenAPI 3.1 快速模板
openapi: 3.1.0
info:
title: [API 名称]
version: 1.0.0
description: [API 描述]
servers:
- url: https://api.example.com/v1
description: 生产环境
- url: http://localhost:3000/v1
description: 开发环境
paths:
/users:
get:
summary: 获取用户列表
operationId: listUsers
tags: [Users]
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/LimitParam'
responses:
'200':
description: 成功
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/User'
pagination:
$ref: '#/components/schemas/Pagination'
post:
summary: 创建用户
operationId: createUser
tags: [Users]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'201':
description: 创建成功
'400':
$ref: '#/components/responses/BadRequest'
components:
schemas:
User:
type: object
required: [id, name, email]
properties:
id:
type: string
format: uuid
name:
type: string
email:
type: string
format: email
created_at:
type: string
format: date-time
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- BearerAuth: []
设计原则
必须做
- 资源导向,使用正确的 HTTP 方法
- 一致的命名约定(snake_case 或 camelCase,全局统一)
- 完整的 OpenAPI 3.1 规范
- 合理的错误响应(附可执行的信息)
- 集合端点实现分页
- 清晰的版本和废弃策略
- 提供请求/响应示例
绝不做
- URI 中使用动词(用
/users/{id}而非/getUser/{id}) - 返回不一致的响应结构
- 忽略 HTTP 状态码语义
- 不做版本策略
- 暴露实现细节到 API
- 无迁移方案的破坏性变更
- 忽略速率限制
知识参考
REST 架构、OpenAPI 3.1、GraphQL、HTTP 语义、JSON:API、HATEOAS、OAuth 2.0、JWT、RFC 7807 Problem Details、API 版本模式、分页策略、速率限制、Webhook 设计、SDK 生成
Weekly Installs
1
Repository
senweaver/senweaver-ideGitHub Stars
15
First Seen
13 days ago
Security Audits
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1