graphql-designlisted
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!
}