REST vs GraphQL

先当一回前端:做个图书榜单页,只需要 4 个字段。按 ①②③④ 往下玩,答案自己冒出来。

01 前端只要 4 个字段,接口却塞了 11 个
榜单页只用 书名 · 作者 · 评分 · 价格。三种接口各返回了什么?
再点一下「简介」开关,看页面想要新字段时,谁会掉链子。
图书商城 · 排行榜
页面卡片只需要:书名 · 作者 · 评分 · 价格
加载中...
页面用到 多余字段
REST 完整套餐 GET /catalog/full
- 响应字节 - 浪费
请求中...
REST 瘦身版 GET /catalog/light
- 响应字节 - 浪费
请求中...
GraphQL 自选 POST /graphql
- 响应字节 - 浪费
请求中...
02 连刷 10 次,GET 白嫖缓存
REST 走 GET,浏览器自动缓存;GraphQL 走 POST,次次全价。
点下面按钮,看 10 次累计差多少。
指标 REST 完整套餐 REST 瘦身版 GraphQL
首次耗时---
第 2 次起平均---
10 次累计---
03 拖大 limit,服务端成本就爆
GraphQL 想多深就多深。把 limit 拖到 100,勾上 author + reviews,点「跑一次」,看服务端真实执行多少次 SQL。
-
服务端 SQL 次数
-
加载数据行
-
服务端耗时 ms
理论预测(N+1 模型): -
04 结论:为什么 REST 仍是主流
GraphQL
  • 客户端精确取数,省流量
  • 一次请求拿完嵌套数据
  • 代价:服务端成本无上界
=
REST
  • 接口即契约,成本可预估
  • GET 天然可缓存、幂等
  • 代价:字段冗余(可优化)

GraphQL 的代价集中在服务端:它把复杂度从客户端搬到了服务端——而公开 API 是服务端买单。BFF 内部用 GraphQL、对外用 REST,是最常见的折中。