← ClaudeAtlas

graphql-designlisted

【GraphQL设计】设计 GraphQL Schema,包含类型定义、查询/变更设计、分页方案、错误处理、性能优化(N+1防护)。 触发时机: - 用户要求"设计GraphQL API"、"GraphQL Schema" - 从 REST 迁移到 GraphQL - 需要优化 GraphQL 性能 输出可执行的 Schema 定义。
afine907/skills · ★ 0 · API & Backend · score 75
Install: claude install-skill afine907/skills
# GraphQL Design — GraphQL API 设计技能 设计专业的 GraphQL Schema,包含最佳实践和性能优化。 ## Goal 设计 GraphQL Schema,包含类型定义、查询/变更设计、分页方案、错误处理、性能优化(N+1防护) ## Trigger - 用户要求"设计GraphQL API"、"GraphQL Schema" - 从 REST 迁移到 GraphQL - 需要优化 GraphQL 性能 ## Schema 设计原则 1. **类型优先** — 先设计 Schema,再实现 Resolver 2. **不可变设计** — 只暴露需要的数据,不要暴露内部实现 3. **分页规范** — 使用 Relay 风格的 Cursor 分页 4. **错误处理** — 使用 Union Type 处理业务错误 5. **性能防护** — 防止 N+1 查询和恶意深层嵌套 ## 类型定义模板 ```graphql # scalar DateTime scalar DateTime scalar JSON # 公共接口 interface Node { id: ID! } # 分页相关 type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: String endCursor: String } # 用户类型 type User implements Node { id: ID! email: String! name: String! avatar: String role: UserRole! createdAt: DateTime! updatedAt: DateTime! # 关联查询 posts(first: Int, after: String): PostConnection! orders(first: Int, after: String): OrderConnection! } enum UserRole { ADMIN USER GUEST } # 帖子类型 type Post implements Node { id: ID! title: String! content: String! status: PostStatus! author: User! tags: [Tag!]! createdAt: DateTime! updatedAt: DateTime! } enum PostStatus { DRAFT PUBLISHED ARCHIVED } type Tag { id: ID! name: String! } # 分页 Connection type UserConnection { edges: [UserEdge!]! pageInfo: PageInfo! totalCount: Int! } type UserEdge { cursor: String! node: User! }