REST API 是现今最流行的 API 设计风格,开发人员使用它们将数据从服务器推送到客户端。尽管 REST API 拥有许多优点,例如易于理解、简单、易于缓存和可扩展性,但也存在一些限制。比如需要多个请求才能获取所需的数据、缺乏灵活性、数据冗余等。而 GraphQL 正是为了解决这些限制而被创建。
GraphQL 是一种 API 查询语言和运行时,可以在客户端定义查询的结构,这也是其与 REST 最显著的不同。本文介绍如何使用 GraphQL 克服 REST 的限制,且会为读者提供足够的指导意义和示例代码。
GraphQL 与 REST 对比
REST 架构的限制可以通过 GraphQL 得到解决,围绕着 Data Graph 这一模型,GraphQL 使得请求方只能获取所需的数据,从而避免 REST 中的多次请求问题。GraphQL 还支持查询参数和可选参数,可以根据不同的查询情况返回不同的结果,从而提供灵活性。
REST 架构中,客户端实际上无法控制其从 API 中检索的数据。为了获得所需的数据,客户端必须执行一个 API 端点或更多,而且往往需要频繁调用。这样做的问题是,REST 风格的 API 可能会返回太多或太少需要的数据。这就需要客户端通过代码处理这些数据,使这种风格成为另一种数据过度传输的体系结构。
GraphQL 与 REST 不同,它使用单个 URL。该 URL 充当 API,客户端发出请求以获取所需数据。实际上,客户端使用查询语句来定义其对 API 的期望值。使用 GraphQL,客户端一次请求就能获取到所需的所有数据。
GraphQL 的优点
- 更小的网络负载
GraphQL 可以解决 REST 中的问题,即返回过多或过少的数据。查询语言支持选择所需的字段,因此服务器端只会返回所需的数据。这减少了从服务器下载的数据量,从而缩短了处理时间。
- 请求端点单一
使用 REST API,每个端点可能只返回有限的信息,因此客户端需要执行多个端点才能获取其需要的所有信息,从而导致多次网络请求。GraphQL API 可以提供所需的所有数据,从而消除了不必要的延迟。
- 灵活的查询
GraphQL 查询支持参数和可选参数,可以根据不同的查询情况返回不同的结果。这提供了更大的灵活性,客户端能够更好地控制其从 API 中得到的数据。
GraphQL 缺点
- 大量重复数据
当存在多个相似查询的情况时,查询可以在某些字段上重复。这可能导致大量重复的数据返回到客户端,产生额外的网络负载。
- 难于理解
相对于 REST API,GraphQL API 更难理解。GraphQL 可以组合不同的操作来创建复合查询,但必须具有高级知识才能正确查询数据。
GraphQL 示例代码
以下是 GraphQL 查询的示例:
-- -------------------- ---- ------- ----- - --------------- ------ - ----- ------- ------ - ---- ------ - --- ------ ----- - - --------------- -- ------- ------- - ---- ------ - ---- ------ - --- ------ ----- - - - - -
在此示例中,查询获取文章及其作者和前三个评论。我们使用 getPost 函数和 postId 进行过滤。此查询只返回所需的数据,而不是 REST API 中返回的所有数据。
总结
GraphQL 是一种强大的 API 查询语言和运行时,适用于需要从服务器获得大量数据的应用程序。相对于 REST API,GraphQL 具有更灵活的查询功能,可以一次返回所需的数据。GraphQL 的优势在于更小的网络负载、更小的请求端点数量和更灵活的查询。因此,当应用程序需要大量数据时,请考虑使用 GraphQL。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6482a13d48841e9894203a56