Communitygithub.com

jakirhussainkhan/dev-skills

在设计或审查 API 时使用此技能 —— 支持 REST、GraphQL、tRPC 或 gRPC。触发关键词:API 设计、REST、GraphQL、tRPC、gRPC、端点、模式、路由、OpenAPI、Swagger、API 版本控制、分页、API 契约、HTTP 方法。

dev-skills 是什么?

此技能为开发者和 AI 代理提供了一套全面的 API 设计指南,涵盖 REST、GraphQL、tRPC 和 gRPC 四种主流协议。它帮助用户根据场景(如公开 API、移动应用、TypeScript 单体仓库或高性能微服务通信)选择最合适的 API 类型。详细信息包括 REST API 的 URL 约定、HTTP 状态码、响应信封(含数据、元数据、错误格式)、版本控制策略、分页、过滤与排序以及幂等性设计。对于 GraphQL,它强调业务领域建模、连接模式、变更返回修改对象的规则。此外,还包含一个 API 安全清单,涵盖认证、授权、速率限制、输入验证、敏感数据保护和 CORS 配置。该技能适用于 Claude Code、Cursor、Codex 等 AI 代理平台,通过触发关键词(如 "API 设计"、"REST" 等)自动激活,为 API 设计和审查提供规范和最佳实践。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/jakirhussainkhan/dev-skills/tree/HEAD/.github/skills/api-design

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

API 设计

选择合适的 API 类型

类型最佳适用场景避免使用场景
REST公开 API、CRUD 操作、简单客户端、物联网复杂的嵌套数据、频繁的模式迭代
GraphQL移动应用、复杂嵌套数据、多客户端简单的 CRUD 操作、不熟悉的小团队
tRPCTypeScript 单体仓库、内部全栈 TypeScript API非 TypeScript 客户端、公开 API
gRPC高性能微服务通信、流式处理浏览器客户端、简单用例

REST API 设计

URL 约定

GET    /users              ← 列表
GET    /users/{id}         ← 单个
POST   /users              ← 创建
PUT    /users/{id}         ← 替换
PATCH  /users/{id}         ← 部分更新
DELETE /users/{id}         ← 删除

# 嵌套资源
GET    /users/{id}/orders
POST   /users/{id}/orders

# 动作(当 REST 动词不够用时)
POST   /orders/{id}/cancel
POST   /users/{id}/activate

HTTP 状态码

状态码使用场景
200成功的 GET、PUT、PATCH 操作
201成功的 POST 创建操作
204成功的 DELETE 操作(无响应体)
400验证失败、错误请求
401缺少或无效的身份验证
403已认证但未授权
404资源未找到
409冲突(重复、版本不匹配)
422无法处理的实体(语义错误)
429超出速率限制
500意外的服务器错误

响应信封

// 集合
{
  "data": [...],
  "meta": { "total": 100, "page": 1, "perPage": 20 }
}

// 单个资源
{ "data": { "id": "1", "name": "James" } }

// 错误
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "验证失败",
    "details": [{ "field": "email", "issue": "格式无效" }]
  }
}

API 设计原则

版本控制策略

# URL 版本控制(最直观,最易路由)
/v1/users
/v2/users

# 头部版本控制(URL 更清晰)
Accept: application/vnd.api+json;version=2

切勿破坏现有客户端。先弃用,再移除。

分页

# 偏移量分页(简单,适合小数据集)
GET /posts?page=2&perPage=20

# 游标分页(大数据集快速,适用于无限滚动)
GET /posts?cursor=eyJpZCI6MTAwfQ&limit=20

过滤与排序

GET /orders?status=pending&userId=123
GET /products?sort=-price,name    # - 前缀表示降序
GET /products?fields=id,name,price  # 稀疏字段集

幂等性

# 为幂等的操作包含幂等键
POST /payments
Idempotency-Key: unique-client-generated-uuid

GraphQL 设计

模式设计规则

  • 描述业务领域,而非数据库结构
  • 使用连接模式处理列表(支持分页)
  • 变更操作返回修改后的对象
  • 对有限的值集合使用枚举
  • 为所有类型和字段添加描述
type Query {
  user(id: ID!): User
  users(filter: UserFilter, pagination: PaginationInput): UserConnection!
}

type Mutation {
  createUser(input: CreateUserInput!): CreateUserPayload!
  updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
}

type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
  totalCount: Int!
}

API 安全清单

  • 所有端点都需要身份验证(除非明确公开)
  • 按资源检查授权,而非仅按路由
  • 对所有端点进行速率限制,并在认证端点上更严格
  • 对每个参数和请求体字段进行输入验证
  • 除非明确需要,否则不返回敏感数据
  • CORS 配置使用明确的允许列表
  • 在公开 API 前定义好版本控制策略

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能