GraphQL 的优点和缺点17 Mar 2025 | 4 分钟阅读 当 Facebook 构建 GraphQL 时,他们需要一个强大的数据获取 API,该 API 可以处理 Facebook 的所有任务,但同时又简单易学,方便其产品开发人员使用。 GraphQL 的开发旨在重建 Facebook 的原生移动应用程序。 GraphQL 是一种查询语言。它以字符串的形式提供查询,该字符串被发送到服务器。服务器解释该查询,然后以 JSON 格式将结果返回给客户端。 GraphQL 的优点以下是 GraphQL 的主要优点列表 1. GraphQL 速度更快 GraphQL 比其他通信 API 快得多,因为它允许您仅选择您要查询的特定字段来减少您的请求查询。 2. 适用于复杂系统和微服务 我们可以在 GraphQL 的 API 背后集成多个系统。 它统一了它们并隐藏了它们的复杂性。 GraphQL 服务器也用于从现有系统中获取数据,并将其打包成 GraphQL 响应格式。 这对于规模巨大且难以维护和处理的遗留基础设施或第三方 API 来说最有利。 当我们需要从单体后端应用程序迁移到微服务架构时,GraphQL API 可以帮助我们通过将它们合并到一个 GraphQL 模式中来处理多个微服务之间的通信。 3. 没有过度获取和获取不足的问题 GraphQL 相对于 REST 的主要优势在于 REST 响应包含太多数据,或者有时数据不够,这需要另一个请求。 GraphQL 通过在单个请求中仅获取确切的特定数据来解决此问题。 4. 分层结构 GraphQL 遵循分层结构,其中对象之间的关系在图形结构中定义。 在这里,每个对象类型都代表一个组件,并且从一个对象类型到另一个对象类型的每个关系字段都代表一个包装另一个组件的组件。 5. 定义数据形状 当我们向服务器请求 GraphQL 查询时,服务器会以简单、安全和可预测的形状返回响应。 因此,它允许您根据您的要求编写特定的查询。 这使得 GraphQL 确实易于学习和使用。 6. 代码共享 我们可以在更高级别的组件中共享在多个查询中使用的 GraphQL 字段以供重用。 此功能称为片段,允许您获取不同的数据,同时保留相同的模式字段。 7. 强类型 GraphQL 是一种强类型语言,其中 GraphQL 查询的每一层都对应于特定的类型,并且每种类型都描述一组可用的字段。 因此,它类似于 SQL,并在执行查询之前提供描述性错误消息。 8. 协议,而非存储 任意函数支持服务器上的 GraphQL 字段。 它们不指示或提供任何后备存储。 相反,GraphQL 利用您现有的代码。 9. 内省 我们可以查询 GraphQL 服务器以获取其支持的类型。 它为工具和客户端软件(如应用程序框架、Relay 或 IDE(如 GraphiQL)创建了一个强大的平台。 GraphiQL 允许开发人员快速学习和探索 API。 10. 不需要最新版本 在 GraphQL 中,结果集或返回的数据非常具体,具体取决于客户端的查询,因此; 服务器对其进行概括非常简单。 当我们添加新产品功能、服务器的附加字段时,它们不会影响现有客户端。 您可以使用旧服务器而无需担心,因为服务器字段可以被弃用,但会继续运行。 这种兼容的流程不需要递增的版本号。 您可以看到 Facebook 在其应用程序中使用相同版本的 GraphQL API。 GraphQL 的缺点尽管 GraphQL 的缺点可以忽略不计,但我们在此处给出了一些缺点。 以下是 GraphQL 的缺点列表 1. GraphQL 查询复杂性 不要将 GraphQL 误认为是服务器端数据库的替代品。 它只是一个简单的查询语言。 当请求一个查询时,服务器会执行数据库访问。 当我们必须在一个查询中访问多个字段时,无论它是在 RESTful 架构中还是 GraphQL 中被请求,不同的资源和字段仍然必须从数据源中检索。 因此,当客户端一次请求太多嵌套字段数据时,它也会显示相同的问题。 因此,必须有一种机制,如最大查询深度、查询复杂性加权、避免递归或持久查询,以阻止来自客户端的低效请求。 2. GraphQL 缓存 使用 GraphQL 实现简化的缓存比在 REST 中实现更复杂。 在 REST API 中,我们使用 URL 访问资源,因此我们可以在资源级别进行缓存,因为我们有资源 URL 作为标识符。 另一方面,在 GraphQL 中,它非常复杂,因为即使查询在同一实体上运行,每个查询也可能不同。 但是,大多数构建在 GraphQL 之上的库都提供了一种高效的缓存机制。 3. GraphQL 速率限制 GraphQL 的另一个问题是速率限制。 在 REST API 中,您可以简单地指定“我们每天只允许这个请求量”,但在 GraphQL 中,很难指定这种类型的语句。 下一主题GraphQL 模式 |
我们请求您订阅我们的新闻通讯以获取最新更新。