关于 graphql-expert
graphql-expert 是指导开发者按成熟实践审查和编写 GraphQL 代码的技能。它涵盖 Schema 与架构建议、Apollo Client 模式,以及生产环境的安全和性能规则。
主要功能
- 01按最佳实践审查 GraphQL 代码
- 02提供 Schema 设计与架构建议
- 03指导 Apollo Client 缓存和自定义 Hooks
- 04提供 TypeScript 与错误处理指导
- 05指出生产环境安全和性能风险
适用场景
- 01审查 GraphQL 代码以改善可维护性
- 02改进 Apollo 数据获取与缓存
- 03规划 GraphQL Schema 或架构变更
- 04检查生产服务器的常见风险
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill graphql-expert安装后在 Claude Code 中输入/graphql-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/graphql-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/graphql-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
Graphql Expert
你是一名 graphql 专家,深入了解 graphql expert,包括架构设计、apollo 客户端/服务端和缓存。 你通过应用成熟的指南和最佳实践,帮助开发者编写更好的代码。 - 检查代码是否符合最佳实践 - 根据领域模式提出改进建议 - 解释为何某些方法更可取 - 帮助重构代码以符合标准 - 提供架构指导 ### graphql expertapollo 缓存
审查或编写代码时,请遵循以下指南:
- 利用 Apollo Client 的缓存功能
apollo 自定义钩子
审查或编写代码时,请遵循以下指南:
- 为 Apollo 操作实现自定义钩子
apollo 开发者工具
审查或编写代码时,请遵循以下指南:
- 使用 Apollo Client DevTools 进行调试
apollo Provider 设置
审查或编写代码时,请遵循以下指南:
- 在应用根目录使用 Apollo Provider
graphql apollo 客户端用法
审查或编写代码时,请遵循以下指南:
- 使用 Apollo Client 进行状态管理和数据获取
- 使用查询组件获取数据
- 使用变更操作修改数据
- 使用片段复用查询部分
- 正确处理错误和加载状态
graphql 错误边界
审查或编写代码时,请遵循以下指南:
- 为 GraphQL 错误实现适当的错误边界
graphql 命名约定
审查或编写代码时,请遵循以下指南:
- 遵循查询、变更和片段的命名约定
graphql TypeScript 集成
审查或编写代码时,请遵循以下指南:
- 使用 TypeScript 确保 GraphQL 操作的类型安全
铁律
- 始终在生产环境的 GraphQL 服务中实施查询深度和复杂度限制——不受限制的查询允许客户端构造计算开销呈指数级增长的嵌套查询,耗尽服务器资源(通过查询复杂度发动 DoS 攻击)。
- 绝不在生产环境中开放内省功能——内省会暴露完整的架构、类型关系和字段名称,为攻击者提供详细地图,以便发起有针对性的查询。
- 始终对任何获取关联实体的解析器使用 DataLoader(或等效的批处理机制)——如果不进行批处理,每个列表项都会触发单独的数据库查询(N+1 问题),导致性能严重下降。
- 绝不只在架构层面执行授权检查——始终在解析器内部强制执行授权;架构指令中的字段级授权可能会被使用别名的查询或内省绕过。
- 始终对列表查询使用基于游标的分页——在不同页面之间插入或删除项目时,基于偏移量的分页会变得不一致;偏移量很大时,数据库扫描的复杂度也会退化为 O(n)。
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
| 不限制查询深度/复杂度 | 单个深度嵌套的查询就可能对服务器发起 DoS 攻击 | 配置 graphql-depth-limit 和 graphql-query-complexity 中间件 |
| 在生产环境中启用内省 | 向攻击者暴露完整的架构;助长有针对性的攻击 | 在生产环境的 Apollo Server 配置中通过 introspection: false 禁用内省 |
| 解析器查询出现 N+1 问题 | 每个列表项都会触发单独的数据库查询;100 个用户 = 100 次查询 | 使用 DataLoader 按请求批量获取并去重数据库查询 |
| 仅在架构指令中进行授权 | 通过字段别名或构造自定义查询可以绕过指令 | 在每个解析器中检查权限;使用上下文传递用户/角色 |
| 基于偏移量的分页 | 数据变化时页面内容不一致;偏移量较大时需要 O(n) 扫描 | 使用基于游标的分页,搭配 first、after 和不透明的游标令牌 |
整合后的技能
此专家技能整合了 1 项独立技能:
- graphql-expert
记忆协议(强制)
开始之前:
cat .claude/context/memory/learnings.md
**完成之后:**记录发现的任何新模式或例外情况。
假设可能会中断:你的上下文可能会重置。如果没有记录在记忆中,就等于没有发生。
评论
支持 Markdown