一个常见的误解是 JSON 和 GraphQL 是竞争技术。实际上,GraphQL 使用 JSON 作为数据格式。理解它们的关系有助于构建更好的 API。
真实关系
GraphQL 的响应就是 JSON。问题不是 JSON vs GraphQL,而是 REST vs GraphQL。
REST + JSON 示例
多个请求获取用户数据:
GET /api/users/1 → { "id": 1, "name": "Alice", ... }
GET /api/users/1/posts → [{ "id": 10, "title": "...", ... }]
GET /api/users/1/followers → [{ "id": 2, "name": "Bob", ... }]
GraphQL + JSON 示例
单次请求获取精确数据:
query {
user(id: 1) {
name
posts { title }
followers { name }
}
}
返回 JSON:
{
"data": {
"user": {
"name": "Alice",
"posts": [{ "title": "第一篇文章" }],
"followers": [{ "name": "Bob" }]
}
}
}
何时使用 REST + JSON
何时使用 GraphQL + JSON
性能对比
| 方面 | REST | GraphQL |
|------|------|---------|
| 请求数 | 多次 | 单次 |
| 过度获取 | 常见 | 消除 |
| 缓存 | 内置 (HTTP) | 手动 |
| 学习曲线 | 低 | 较高 |