GraphQL vs REST:现代 API 设计的选择
REST 已经统治 API 设计二十年,但 GraphQL 正在改变游戏规则。
REST 的核心问题
Over-fetching(过度获取)
请求 /api/users/123 返回了所有字段,但你可能只需要 name 和 email。
Under-fetching(获取不足)
需要多个请求才能获取关联数据:先获取用户,再获取用户的文章,再获取文章的评论。
GraphQL 的解决方案
query {
user(id: "123") {
name
email
posts(first: 5) {
title
comments {
author { name }
content
}
}
}
}
一次请求,精确获取所需数据。
性能对比
| 场景 | REST | GraphQL |
|---|---|---|
| 简单查询 | 更快 | 稍慢 |
| 复杂关联 | N+1 问题 | DataLoader 解决 |
| 缓存 | HTTP 缓存开箱即用 | 需要额外配置 |
| 带宽 | 容易 over-fetching | 按需获取 |
选择建议
- 用 REST:简单 CRUD API、文件上传下载、第三方公开 API
- 用 GraphQL:复杂数据关系、多端共享 API、快速迭代产品
总结
两者不是非此即彼。许多公司采用混合方案:GraphQL 用于 BFF 层,REST 用于内部微服务通信。