关于 graphql
这是一份 GraphQL 参考技能,涵盖 Federation、Schema 模式、DataLoader 和查询优化,适合设计跨服务 API,或需要性能与查询控制指导的开发者。
主要功能
- 01Apollo Federation 服务组合
- 02DataLoader 批处理与缓存
- 03Relay 分页与错误处理模式
- 04持久化查询及查询限制
适用场景
- 01通过网关组合 GraphQL 服务
- 02减少 N+1 数据库查询
- 03设计分页 GraphQL 响应
- 04添加查询深度与成本控制
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ thebeardedbearsas/ claude-craft --skill graphql安装后在 Claude Code 中输入/graphql确认已加载。
详细介绍
GraphQL — Apollo Federation、Schema 设计
支持 Federation、DataLoader 和优化的现代 GraphQL API。
GraphQL 与 REST
GraphQL — 一次定制化查询、无需版本控制、自动内省
REST — 多个端点、过度获取数据、v1/v2/v3
Apollo Federation
# Users service
type User @key(fields: "id") { id: ID!, name: String! }
# Orders service
extend type User @key(fields: "id") {
id: ID! @external
orders: [Order!]!
}
Gateway 会自动组合各项服务。
N+1 问题 — DataLoader
// ❌ N+1 queries
User: { orders: (u) => db.orders.findByUserId(u.id) }
// ✅ DataLoader batch
const loader = new DataLoader(async (ids) => {
const orders = await db.orders.findByUserIds(ids);
return ids.map(id => orders.filter(o => o.userId === id));
});
User: { orders: (u) => loader.load(u.id) }
模式
分页(Relay)
type UserConnection {
edges: [{ node: User!, cursor: String! }]!
pageInfo: { hasNextPage: Boolean!, endCursor: String }!
}
错误处理
type CreateUserPayload {
user: User
errors: [{ field: String, message: String! }]
}
优化
DataLoader — 批量处理 + 缓存
持久化查询 — 哈希查找
深度限制 — 防止 DoS
成本分析 — 查询预算
设计请参阅 @api-designer
评论
支持 Markdown