JSON 与 GraphQL:理解差异及使用场景

jsongraphqlrest-apicomparison

一个常见的误解是 JSON 和 GraphQL 是竞争技术。实际上,GraphQL 使用 JSON 作为数据格式。理解它们的关系有助于构建更好的 API。

真实关系

  • JSON 是数据格式(数据如何编码)
  • GraphQL 是查询语言(数据如何请求)
  • REST 是架构风格(数据如何访问)
  • 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

  • 简单 CRUD 操作 — 标准的增删改查
  • 缓存很重要 — HTTP 缓存更简单
  • 文件上传 — REST 更直接
  • 小团队 — 更少的设置和工具
  • 公共 API — 更低的入门门槛
  • 何时使用 GraphQL + JSON

  • 复杂数据关系 — 嵌套、互联的数据
  • 移动应用 — 最小化数据传输
  • 多客户端 — Web、移动端、电视等不同需求
  • 快速迭代 — 前端可以独立演进
  • 性能对比

    | 方面 | REST | GraphQL |

    |------|------|---------|

    | 请求数 | 多次 | 单次 |

    | 过度获取 | 常见 | 消除 |

    | 缓存 | 内置 (HTTP) | 手动 |

    | 学习曲线 | 低 | 较高 |

    使用我们的 JSON 格式化器 格式化任何 JSON 响应,使用 JSON 验证器 进行验证。

    相关工具