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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

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

Mutation

写操作、输入类型、返回 payload。

30 分钟

Mutation

Mutation 负责写操作:创建、更新、删除。与 Query 不同,Mutation 通常 串行执行(同一请求内按顺序),并常返回 payload(新对象 + 错误信息)。

学习目标

  • 定义 Mutation 与 Input 类型
  • 理解返回 payload 的设计模式
  • 对照 REST 动词的映射关系

核心内容

Schema 定义

input CreateTrackInput {
  slug: String!
  title: String!
  level: String
}

type CreateTrackPayload {
  track: Track
  errors: [String!]
}

type Mutation {
  createTrack(input: CreateTrackInput!): CreateTrackPayload!
  updateTrack(slug: String!, title: String): Track
  deleteTrack(slug: String!): Boolean!
}

Input 类型不可有字段 Resolver 嵌套查询;复杂校验在服务端完成(类似 spring-boot-essentials 的 @Valid)。

客户端调用

mutation CreateTrack($input: CreateTrackInput!) {
  createTrack(input: $input) {
    track { slug title }
    errors
  }
}
{
  "variables": {
    "input": { "slug": "lab-gql", "title": "GraphQL 实验", "level": "intermediate" }
  }
}

与 REST 对照

操作REST(本站 TrackController)GraphQL
创建POST /tracks + bodymutation createTrack
更新PUT /tracks/{id}mutation updateTrack
删除DELETE /tracks/{id}mutation deleteTrack

CodeRoadMap 管理端与主 API 走 REST;Mutation 课用于理解 GitHub、Shopify 等 GraphQL-first 平台。不要在未授权实验环境外对生产 /tracks 写接口做破坏性测试。

乐观 UI 提示

react-essentials 表单提交后可乐观更新列表;Apollo update 函数写缓存。REST 则 invalidate SWR/React Query 缓存——模式不同,UX 目标相同。

练习

  • 为 createLesson 设计 Input 与 Payload 类型
  • 写 Mutation:更新 track 的 title,返回完整
Track
  • 讨论:为何 GraphQL 很少用 HTTP DELETE,而用一个 mutation 字段
  • 小结

    Mutation = Schema 内的写操作;Input/Payload 保持类型安全。 下一课 Resolver 如何把字段落到 Java 代码。

    加载本节练习…
    ← 上一课Query 与字段选择下一课 →Resolver 模型