用途:在 Rails 应用中设计、实现或审查基于 graphql-ruby 的 GraphQL API,覆盖 schema、resolver、mutation 与 dataloader。
主要能力与流程:
- 先写失败 spec(正常路径、鉴权、校验错误),在 spec/graphql/ 中使用 AppSchema.execute,不用 HTTP 控制器分发。
- 定义参数与返回类型,分页使用 connection_type,避免泄露内部模型名。
- 实现 resolver/mutation 类并委托给 service 对象,使用专用类而非内联字段块。
- N+1 检查:关联加载一律用 dataloader,列表 resolver 需先用关系返回的记录预热 dataloader;spec 中用 bullet 与 db-query-matchers。示例:dataloader.with(Sources::RecordById, Buyer).load(object.buyer_id)。
- 鉴权:敏感字段用 Pundit 或自定义 context guard 做字段级守卫,例如 guard -> (_obj, _args, ctx) { ctx[:current_user]&.admin? }。
- 错误处理:mutation 失败返回 { result, errors },如 rescue ActiveRecord::RecordInvalid => e 后返回 { order: nil, errors: e.record.errors.full_messages }。
- 提交前确认 HARD-GATE 清单:spec 覆盖正常、未认证、未授权、校验错误、N+1 计数与 schema 限制;每个关联使用 dataloader;集合 resolver 预热;敏感字段有字段级守卫;分页用 connection_type;生产禁用 introspection 并设置 max_depth 与 max_complexity;mutation 有 rescue;每个字段有 description;使用专用 resolver 类。
适用场景:Rails + graphql-ruby 的 API 开发与代码审查。
限制:资料未提供安装命令、版本要求、收费信息或具体平台支持;扩展内容需按需加载 TESTING.md 与 EXAMPLES.md。