GraphQL

GraphQL

告别 REST 的过度请求——客户端精确声明所需数据,单端点、强类型、实时订阅

精确获取
强类型Schema
单一端点
实时订阅
10 核心章节
Meta 开源
GitHub Shopify·Twitter采用

为什么用 GraphQL?

REST API 存在两个经典问题:过度获取(Over-fetching)——拿到比需要更多的字段;欠获取(Under-fetching)——需要发送多个请求才能拿齐所需数据。在移动端,这两个问题尤其严重,因为带宽有限而 REST 端点往往是为桌面 Web 设计的。

2012 年,Facebook 的移动团队在开发 News Feed 时遇到了这个问题,于是内部开发了 GraphQL。2015 年开源后,GitHub、Shopify、Twitter、Airbnb 等公司相继采用,GraphQL 逐渐成为现代 API 设计的重要选项。

GraphQL 的核心思想是:客户端告诉服务器它需要什么,服务器精确返回这些数据,不多也不少。这依赖于强类型的 Schema 系统和声明式查询语言。

核心特性

GraphQL 重新定义了客户端与服务器的数据交互方式

🎯

声明式查询

客户端精确声明需要哪些字段,服务器只返回这些字段,消除过度获取。

📐

类型系统

强类型 Schema 是 API 的契约,自动生成文档,前后端类型安全。

🔴

实时订阅

Subscription 通过 WebSocket 实现服务端推送,适合实时通知、聊天等场景。

🔍

自省

客户端可以查询 Schema 本身的结构,支持动态探索 API 能力。

DataLoader

批处理 + 缓存机制,自动解决 N+1 查询问题,大幅提升后端性能。

🏗️

联邦架构

Apollo Federation 将多个 GraphQL 服务合并为统一的超图,支持微服务架构。

课程目录

从零掌握 GraphQL,构建生产级 API

Chapter 01

GraphQL 核心概念与 REST 对比

REST 的痛点,Facebook 开发背景,GraphQL vs REST vs gRPC,安装 Apollo Server,Playground。

ApolloREST对比
Chapter 02

Schema 定义语言(SDL)

type/scalar/enum/input/union/interface,内置标量,自定义标量,Non-null,schema 设计原则。

SDLSchema
Chapter 03

Query:精确查询数据

字段选择,参数,别名,片段,操作名称,变量,指令 @include/@skip,内省查询。

QueryFragment
Chapter 04

Mutation:修改与写入

mutation 操作,input 类型,乐观 UI,错误处理模式,事务操作,文件上传。

Mutationinput
Chapter 05

Subscription:实时数据推送

WebSocket 协议,PubSub 实现,Redis PubSub,withFilter 过滤,实时聊天示例。

SubscriptionWebSocket
Chapter 06

Resolver 设计与 DataLoader

Resolver 签名,context 传递,DataLoader 批处理原理,解决 N+1,Resolver 链。

ResolverDataLoader
Chapter 07

认证与权限控制

JWT 验证,context 注入,graphql-shield,字段级权限,RBAC,AuthenticationError。

JWT权限
Chapter 08

分页:Cursor vs Offset

Offset 分页局限,Relay Cursor 规范,edges/node/cursor,pageInfo,无限滚动实现。

分页Relay
Chapter 09

性能优化:N+1 与缓存

DataLoader 批处理,查询复杂度限制,持久化查询,@cacheControl,CDN 缓存。

N+1缓存
Chapter 10

全栈实战:Next.js + GraphQL

Apollo Client,useQuery/useMutation/useSubscription,GraphQL Codegen,类型安全查询。

Next.jsCodegen