什么是 GraphQL——误解。

2025-06-07

什么是 GraphQL——误解。

GraphQL

我喜欢谈论 GraphQL,尤其是和那些一直在使用 GraphQL 或正在考虑采用 GraphQL 的人讨论。人们常问的一个问题是,为什么有人想从 REST 迁移到 GraphQL。有很多资源讨论了 REST 和 GraphQL 之间的区别,如果你对这两者的区别感兴趣,这些资源非常值得一看。在这篇博文中,我想解答一些关于 GraphQL 的常见误解和疑问。

前端如何从 GraphQL 中获益?

作为前端工程师,我喜欢使用 GraphQL API,原因如下:

  1. 使用 GraphiQL 或 playground 立即测试查询和突变
  2. 更少的数据意味着更轻松的状态管理
  3. 通过解析器将繁重的工作转移到服务器上
  4. 最新且交互式的文档

它比 REST 好在哪里?

  1. 一个端点来获取所有资源。
  2. 避免过度获取数据(当只需要几个字段时获取太多字段)。
  3. 避免数据获取不足(必须调用多个 API,因为一个 API 无法返回所需的所有信息)。

误解:GraphQL 仅适用于类似图形的结构。

GraphQL 可用于查询图数据库,但这并非其唯一用例。GraphQL 中的“图”用于表示类似图的数据结构。您可以根据节点及其相互连接的方式对数据进行建模。Schema 用于表示这种建模。

GraphQL 规范中没有强制要求数据源必须是图形的限制。

误解:GraphQL 仅适用于基于图的数据库或数据源。

认为需要重写数据库才能采用 GraphQL 是一种误解。GraphQL 可以包装任何数据源,包括数据库。GraphQL 是一种query language for your API——这意味着它是一种如何请求数据的语法。

误区:使用解析器、查询和变异进行数据获取可以产生神奇的效果。

您需要精确定义每个函数的功能。您需要编写在查询触发时调用的函数,并为解析器编写函数,使其返回您所需的数据,并知道要调用哪个 API。您需要通过调用解析器来定义这些函数返回的数据。

误解:GraphQL 是一种像 SQL 一样的数据库语言。

GraphQL 是一种编程语言,确切地说是一种查询语言。GraphQL 的规范定义了 GraphQL 运行时应如何实现该语言,以及数据应如何在客户端和服务器之间进行通信。GraphQL 用于请求数据,并且可以在从前端到后端的任何层级的多个位置使用。有些数据库(例如 DGraph)实现了 GraphQL 规范,允许客户端使用 GraphQL 查询数据库。

误解:GraphQL 取代 Redux 或任何状态管理库

Redux 是一个状态管理库。GraphQL 不是一个状态管理库。GraphQL 有助于减少数据获取,从而减少客户端需要管理的数据,但它不是一个状态管理解决方案。您仍然需要管理状态——尽管它很轻量级。像 Apollo 和 Relay 这样的客户端库可以用来管理状态,并且内置了缓存功能。GraphQL 并不是 Redux 的替代品——它有助于减少对 Redux 的需求。

误解:在使用 GraphQL 的实现中不能拥有 REST 端点。

您可以在应用程序中插入多个 REST 端点,甚至多个 GraphQL 端点。虽然使用多个 REST 端点并非最佳实践,但技术上是可行的。

误解:GraphQL 很难引入现有项目。

GraphQL 可以插入到现有项目中。您可以先从业务逻辑的一个组件入手,然后插入 GraphQL 端点,即可开始通过 GraphQL 获取数据。您无需放弃整个项目即可开始使用 GraphQL。如果切换到 GraphQL 端点仍然困难重重,您可以先使用解析器将 REST 端点屏蔽为 GraphQL 端点。

误解:GraphQL 仅适用于前端开发人员。

GraphQL 与平台无关。在我看来,GraphQL 的优势在于其由内而外的本质——从后端到前端。作为后端开发者,您可以通过添加字段来扩展 API,而无需发布新版本的 API。您无需为不同的需求编写不同的端点,因为客户端可以获取所需的任何数据。使用 GraphQL,您可以查看客户端正在使用的字段,从而提供强大的检测功能。

误解:GraphQL 会自行编写数据库查询,我只需要指定模式及其之间的关系。

您可能需要根据所使用的 GraphQL 库编写数据库查询。但是,某些库(例如 Neo4j 和 Prisma)也编写数据库查询,并将逻辑从开发人员手中抽象出来。所有内容(包括解析器、查询和变更)都需要定义。

误解:GraphQL 用于绘制图形。

GraphQL 的新手常常会以为它是一个类似 D3 的图形绘制软件。其实 GraphQL 本身并不绘制图形。

误区:它需要复杂的客户端,并且几乎不可能通过简单的 HTTP 获取来实现

GraphQL API 本身调用起来非常简单。您无需客户端即可调用 GraphQL API。您可以通过 HTTP 协议使用简单的 curl 命令即可调用 GraphQL API。查看本文了解如何操作。

误解:它取代了 ORM。

最近我们看到很多 DB 和 GraphQL 的集成,但 GraphQL 本身并不是那样的。

我认为 GraphQL 非常棒,每个人都应该尝试一下。我尤其喜欢它能够获取我需要的数据,而不必丢弃剩余的有效负载——因为我从 GraphQL API 返回的有效负载正是我需要的有效负载。

有很多库可以帮助你开始使用 GraphQL。要开始使用 GraphQL,可以先阅读文档,或者看看这门 Udemy 课程,我发现它在我刚接触 GraphQL 时很有帮助。

如果您喜欢这篇文章,请查看我的 Twitter,我在那里发布 GraphQL 内容和 DevJokes。

Liquid 错误:内部

文章来源:https://dev.to/shrutikapoor08/what-is-graphql-the-misconceptions-57b9
PREV
Vue 3、Vuex 4 模块、Typescript
NEXT
什么是 GraphQL?