CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
GraphQL 入门/课时/Resolver 模型
RawBlame
课时目录12 节

GraphQL 入门

  1. 01GraphQL 是什么
  2. 02Schema 与类型
  3. 03Query 与字段选择
  4. 04Mutation
  5. 05Resolver 模型
  6. 06Spring for GraphQL
  7. 07N+1 与 DataLoader
  8. 08Apollo Client
  9. 09GraphQL vs REST 选型
  10. 10GraphiQL 与 introspection
  11. 11安全与限流
  12. 12综合练习

Resolver 模型

字段解析函数、Resolver 链、与 Controller 对照。

30 分钟

Resolver 模型

Resolver 是字段级解析函数:给定父对象、参数、上下文,返回该字段的值。GraphQL 引擎按 Query 树 自顶向下 调用 Resolver 链。

学习目标

  • 理解「每个字段一个 Resolver」的默认模型
  • 区分根 Resolver 与嵌套字段 Resolver
  • 与 Spring @RestController 方法对照

核心内容

解析流程

Query.track(slug)
    → Track 对象
        → Track.lessons  → List<Lesson>
            → Lesson.title → String

REST 里一个 getTrack(slug) 可能 JOIN 拉全量;GraphQL 里 lessons Resolver 仅在被请求时 执行。

Java 伪代码

@Component
public class TrackResolver {

    public Track track(DataFetchingEnvironment env) {
        String slug = env.getArgument("slug");
        return trackService.findBySlug(slug);
    }

    public List<Lesson> lessons(Track track) {
        return lessonService.findByTrackSlug(track.getSlug());
    }
}

等价 REST 见 spring-boot-essentials TrackController:@GetMapping("/{slug}") 一次返回 DTO。Resolver 把 编排拆到字段级——灵活,也带来 N+1 风险(gql-nplus1)。

Context 与鉴权

// context 注入当前用户、DataLoader 等
GraphQLContext context = env.getGraphQlContext();
Long userId = context.get("userId");

类似 Spring Security 在 Filter 链放入 SecurityContext;Mutation 写操作必须在 Resolver 内校验权限,不能假设 Schema 隐藏字段等于安全。

与 MongoDB / JPA

  • JPA:trackService 走 MySQL cf_track(本站主库)
  • 实验:某字段 Resolver 可读 MongoDB 评论集合(mongodb-essentials)

GraphQL 不绑定存储;Resolver 是 集成层。

练习

  • 画出 track { lessons { title } } 的 Resolver 调用顺序
  • 说明:若 lessons 未被 Query 选中,lessons Resolver 是否执行
  • 对比 TrackController.list() 与 Resolver 的职责边界
Query.tracks

小结

Resolver = 字段到数据的桥梁;粒度比 Controller 更细。 下一课 Spring for GraphQL 注解与 schema 文件布局。

加载本节练习…
← 上一课Mutation下一课 →Spring for GraphQL