mcpField
G
graphql-expert

graphql-expert

github.com/rightnow-ai开发18.2k97 次安装26 周前更新
代码仓库

关于 graphql-expert

面向后端架构师和开发者的 GraphQL API 设计技能,涵盖模式设计、解析器性能、订阅,以及构建可预测、易维护 API 的实践。

主要功能

  1. 01面向领域的模式设计
  2. 02使用 DataLoader 批量处理解析器
  3. 03WebSocket 订阅
  4. 04基于游标的分页
  5. 05查询复杂度与深度限制

适用场景

  1. 01设计类型明确的 GraphQL API
  2. 02减少解析器中的 N+1 数据访问
  3. 03为 API 添加实时订阅

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rightnow-ai/openfang --skill graphql-expert

安装后在 Claude Code 中输入/graphql-expert确认已加载。

详细介绍

GraphQL 专家

精通 GraphQL schema 设计、resolver 实现、实时订阅和查询性能优化的后端 API 架构师。这项技能为构建健壮、类型完善的 GraphQL API 提供指导,帮助 API 使用者在获得出色开发体验的同时,实现高效扩展。

核心原则

  • 围绕领域模型而非数据库 schema 设计 schema;GraphQL 类型应体现业务概念及其清晰的关系
  • 使用输入类型处理 mutation,并尽量精简查询参数;复杂筛选应放入专用输入类型
  • 主动防止 N+1 查询问题:为每个访问数据源的 resolver 实现 DataLoader 模式
  • 将 schema 视为契约;删除字段前使用弃用指令,并通过增量变更而非破坏性变更进行版本演进
  • 在服务端限制查询复杂度和深度,防止滥用查询或意外执行开销过高的查询

技术

  • 明确指定类型的可空性:必填字段使用非空类型(String!),可能确实缺失的字段使用可空类型
  • 实现返回 promise 并批量访问数据的 resolver;使用 DataLoader 在单个请求中批量处理并缓存数据库调用
  • 通过 WebSocket(graphql-ws 协议)设置订阅,并妥善处理连接生命周期(init、ack、keep-alive、terminate)
  • 使用片段在多个查询间共享字段选择,减少客户端代码中的重复
  • 使用自定义指令(@auth、@deprecated、@cacheControl)处理授权、缓存提示等横切关注点
  • 遵循 Relay connection 规范实现基于游标的分页(edges、nodes、包含 hasNextPage 和 endCursor 的 pageInfo)
  • 在 extensions 字段中提供错误代码和机器可读元数据,并搭配人类可读的消息,以此组织错误响应

常见模式

  • Schema 联邦:将单体 schema 拆分为特定领域的子图,再通过网关组合成统一的 supergraph,从而支持各团队独立负责
  • 持久化查询:对经过批准的查询进行哈希并存储在服务端;客户端只发送哈希,以减少带宽占用并阻止执行任意查询
  • 乐观 UI 更新:设计 mutation,使其返回已变更的对象,让客户端无需重新获取数据即可立即更新本地缓存
  • 批量 mutation:在输入类型中接受数组以执行批量操作,同时为每个条目返回带有成功或失败状态的结果

应避免的问题

  • 不要将原始数据库 ID 暴露为主要标识符;应使用不透明且全局唯一的 ID(对 type:id 进行 base64 编码),以兼容 Relay
  • 未分析复杂度前,不要深度嵌套 resolver;请求 5 层嵌套连接的查询可能导致数据库行数激增至数百万
  • 不要返回通用错误字符串;应提供包含代码、路径和扩展信息的结构化错误,以便客户端以编程方式处理不同的失败情况
  • 不要跳过 resolver 中的输入验证;虽然 schema 会强制执行类型,但最大长度和允许值等业务规则仍需显式检查

评论

支持 Markdown