mcpField
A
api-design

api-design

github.com/pixel-process-ug开发383 次安装34 周前更新
代码仓库

关于 api-design

面向团队的引导式 API 设计技能,帮助在实现前明确资源、消费者和约束,再制定端点并生成 OpenAPI 文档供审阅。

主要功能

  1. 01梳理资源与 API 消费者
  2. 02REST、GraphQL 和 tRPC 选型指导
  3. 03设计端点请求与响应
  4. 04统一错误格式并规划分页
  5. 05生成 OpenAPI 规范

适用场景

  1. 01在实现前规划新 API
  2. 02根据 API 消费者调整端点设计
  3. 03记录认证、错误和分页方案
  4. 04生成 OpenAPI 规范以供审阅

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pixel-process-ug/superkit-agents --skill api-design

安装后在 Claude Code 中输入/api-design确认已加载。

详细介绍

API 设计

概述

通过引导式探索设计结构化 API 端点。生成一致且文档完善的 API 设计,并提供 OpenAPI/Swagger 规范。涵盖资源建模、身份验证、分页、错误处理和版本控制,确保在开始实现之前以消费者为中心进行设计。

开始时声明:“我正在使用 api-design 技能来设计 API。”

阶段 1:探索

每次只问一个问题:

资源问题
#问题确定内容
1此 API 管理哪些实体/资源?资源命名
2它们之间存在什么关系?嵌套路由、包含项
3每种资源需要哪些操作?(CRUD、搜索、批量操作)HTTP 方法、端点
消费者问题
#问题确定内容
4谁会使用此 API?(前端、移动端、第三方、内部)响应结构、身份验证模型
5需要哪些身份验证/授权机制?安全方案
6适用哪些速率限制或配额?速率限制标头
约束问题
#问题确定内容
7REST、GraphQL 还是 tRPC?API 范式
8版本控制策略是什么?(URL 路径、标头、查询参数)URL 结构
9采用哪种分页方式?(游标、偏移量、键集)列表响应结构
10代码库中现有的 API 约定是什么?一致性约束
API 范式决策表
因素选择 REST选择 GraphQL选择 tRPC
消费者多样化的多个消费者以为前端服务为主,查询灵活TypeScript 单体仓库
缓存需求强(HTTP 缓存)中等(客户端缓存)低(仅限内部)
数据结构可预测、以资源为导向嵌套、结构可变类型安全的 RPC
团队熟悉度普遍需要了解 schema需要使用 TypeScript
实时需求WebSocket 插件内置订阅支持订阅

探索结束后停止——总结资源、操作和约束。获得确认后再设计端点。

阶段 2:设计端点

为每个端点定义:

### [METHOD] /api/v1/[resource]

**Purpose:** [what this endpoint does]

**Request:**
- Headers: `Authorization: Bearer <token>`
- Query params: `?page=1&limit=20&sort=created_at:desc`
- Body:
  ```json
  {
    "field": "type — description"
  }

响应(200):

{
  "data": [...],
  "meta": { "total": 100, "page": 1, "limit": 20 }
}

错误响应:

状态码代码描述
400VALIDATION_ERROR请求正文无效
401UNAUTHORIZED缺少令牌或令牌无效
404NOT_FOUND资源不存在
409CONFLICT资源已存在

授权:[谁可以访问此端点]


### HTTP Method Decision Table

| Operation | Method | Status (success) | Idempotent |
|-----------|--------|-----------------|------------|
| List resources | GET | 200 | Yes |
| Get single resource | GET | 200 | Yes |
| Create resource | POST | 201 | No |
| Full replace | PUT | 200 | Yes |
| Partial update | PATCH | 200 | No |
| Delete resource | DELETE | 204 | Yes |
| Bulk create | POST | 201 | No |
| Search (complex) | POST | 200 | Yes (safe) |

### Pagination Decision Table

| Approach | When to Use | Pros | Cons |
|----------|------------|------|------|
| **Cursor** | Real-time feeds, large datasets | Consistent, no skipping | Cannot jump to page N |
| **Offset** | Small datasets, admin panels | Simple, jumpable | Skips/duplicates on insert |
| **Keyset** | Time-series, logs | Efficient on large tables | Requires sortable key |

### Error Response Format

All endpoints must use a consistent error shape:

```json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Human-readable description",
    "details": [
      { "field": "email", "message": "Invalid email format" }
    ]
  }
}
状态码参考
代码含义使用场景
200成功GET、PUT、PATCH 成功
201已创建POST 成功并创建资源
204无内容DELETE 成功
400错误请求验证失败
401未授权缺少凭据或凭据无效
403禁止访问凭据有效,但权限不足
404未找到资源不存在
409冲突重复项或状态冲突
422无法处理的实体JSON 有效,但存在语义错误
429请求过多超出速率限制
500内部服务器错误服务器发生意外故障

端点设计完成后停止——逐一提交端点以供审查和批准。

阶段 3:生成 OpenAPI 规范

openapi: 3.1.0
info:
  title: [API Name]
  version: 1.0.0
  description: [API description]

servers:
  - url: http://localhost:3000/api/v1
    description: Development
  - url: https://api.example.com/v1
    description: Production

paths:
  /resource:
    get:
      summary: List resources
      parameters: [...]
      responses: [...]
    post:
      summary: Create resource
      requestBody: [...]
      responses: [...]

components:
  schemas: [...]
  securitySchemes: [...]

规范生成后停止——验证 YAML 并提交以供最终批准。

阶段 4:保存并过渡

获得明确批准后:

  1. 将 OpenAPI 规范保存到 docs/api/YYYY-MM-DD-<api-name>.yaml
  2. 使用提交消息:docs(api): add OpenAPI spec for <api-name>
  3. 根据用户意图确定下一步
转换决策表
用户意图下一项技能理由
“我们来实现这个”planning根据 API 规范制定实现计划
“为此编写规范”spec-writing为每个端点编写行为规范
“生成客户端 SDK”手动使用 OpenAPI 代码生成工具
“只保存设计”无API 设计本身就是交付成果
“添加测试”testing-strategy定义 API 测试方案

设计原则

原则规则
命名一致集合使用复数名词(/users,而不是 /user)
正确使用 HTTP 方法GET 用于读取,POST 用于创建,PUT 用于替换,PATCH 用于更新,DELETE 用于删除
使用正确的状态码针对不同情况使用正确的状态码(见上表)
错误格式一致所有端点使用相同的错误结构
默认分页所有列表端点都应分页
筛选和排序列表端点使用查询参数
幂等性PUT 和 DELETE 始终具有幂等性
HATEOAS包含链接以便于发现(适用时)

反模式 / 常见错误

错误错误原因应采取的做法
URL 使用动词(/getUsers)不符合 REST 风格,违反惯例使用名词:GET /users
单复数使用不一致让使用者困惑集合名称始终使用复数
错误时返回 200向客户端掩盖失败使用正确的状态码
列表端点没有分页大数据集上的性能隐患始终进行分页
每个端点使用不同的错误格式客户端无法构建通用错误处理所有端点使用统一的错误结构
在 URL 中暴露内部 ID存在安全和耦合风险使用 UUID 或 slug
没有版本控制策略破坏性变更会影响客户端从第一天起就进行版本控制
不了解使用者就进行设计API 无法很好地服务任何人先进行探索阶段

防止自我合理化的规则

  • 不要跳过探索阶段——先了解使用者和限制条件
  • 不要在未定义错误响应的情况下设计端点
  • 不要跳过任何列表端点的分页
  • 不要在各个端点中使用不一致的命名
  • 不要在用户批准端点设计之前生成 OpenAPI 规范
  • 不要在没有明确理由的情况下混用 API 范式(REST + GraphQL)

集成点

技能关系
spec-writing下游:API 设计为行为规范提供依据
planning下游:API 端点转化为实现任务
tech-docs-generator下游:OpenAPI 规范用于生成 API 参考文档
testing-strategy下游:API 设计为集成测试策略提供依据
security-review下游:审查 auth/authz 模型是否存在漏洞
database-schema-design上游:数据模型为资源设计提供依据
prd-generation上游:PRD 需求推动 API 资源识别

验证关卡

在宣称 API 设计完成之前:

  1. 验证所有端点都定义了请求/响应架构
  2. 验证所有错误响应都以一致的格式记录
  3. 验证每个端点都指定了身份验证方式
  4. 验证所有列表端点都定义了分页
  5. 验证 OpenAPI 规范是有效的 YAML
  6. 验证用户已逐一批准各个端点

技能类型

灵活——根据项目需求调整 API 范式、分页风格和身份验证模型,同时保留优先探索的方法、一致的错误处理和以使用者为中心的设计原则。

评论

支持 Markdown