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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
GraphQL 入门/课时/Query 与字段选择
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综合练习

Query 与字段选择

按需取字段、嵌套、别名、变量。

30 分钟

Query 与字段选择

Query 是 GraphQL 的读操作:客户端声明需要的字段树,服务端只返回这些字段——解决 REST 常见的 过度获取 与 多次往返。

学习目标

  • 编写嵌套 Query、别名、变量
  • 理解字段选择与 Resolver 的对应关系
  • 对比本站 REST /tracks 响应与等价 Query

核心内容

按需取字段

query TrackList {
  tracks {
    slug
    title
  }
}

列表页只需 slug、title;详情页再查 description、lessons { slug title }。REST 等价:GET /tracks 返回完整 DTO,字段裁剪靠 DTO 版本或 ?fields= 扩展——本站未采用后者。

嵌套与参数

query TrackDetail($slug: String!) {
  track(slug: $slug) {
    title
    level
    lessons {
      slug
      title
      duration
    }
  }
}

变量 $slug 在 HTTP POST body 的 variables 里传入;对应 REST:

GET /tracks/graphql-essentials
GET /tracks/graphql-essentials/lessons/gql-intro   # 若 lessons 未内嵌

别名、片段与前端

别名可一次请求多组数据;Fragment 复用 Lesson { slug title duration } 字段集。nextjs-essentials 课时页从 REST 取 contentMd 再 MDX 渲染——列表 Query 不宜默认带大字段。react-essentials 三态模式不变;Apollo 替换 fetch('/tracks/...') 但 CodeRoadMap 主路径仍 REST。

练习

  • 写 Query:只取 graphql-essentials 前 3 个 lesson 的 slug 与 title
  • 用 Fragment 定义 TrackCard,在两条别名 query 中复用
  • 说明:为何列表页不宜在 REST 或 GraphQL 中默认返回 contentMd

小结

Query = 声明式读;字段即文档。 下一课 Mutation 写操作与输入类型。

加载本节练习…
← 上一课
Schema 与类型
下一课 →Mutation