GraphQL 是一种新的 API 标准,为 REST 提供了更高效、更强大、更灵活的替代方案。

为什么会有GraphQL

REST API 已被证明过于不灵活,无法跟上访问它们的客户端快速变化的需求

REST 最常见的问题之一是过度获取和获取不足。发生这种情况是因为客户端下载数据的唯一方法是访问返回固定数据结构的端点。以能够为客户提供确切数据需求的方式设计 API 是非常困难的

过度获取意味着客户端下载的信息多于应用程序中实际需要的信息

获取不足通常意味着特定端点未提供足够的所需信息。

n+1问题:客户端必须发出额外的请求才能获取所需的一切。这可能会升级为客户端需要首先下载元素列表,但随后需要对每个元素发出一个额外请求以获取所需数据的情况。

REST API 的常见模式是根据应用程序内的视图构建端点。这种方法的主要缺点是它不允许在前端进行快速迭代。对 UI 进行的每一次更改都存在很高的风险,即现在需要的数据比以前更多(或更少)。因此,后端也需要调整以适应新的数据需求。这会降低生产力,并显着降低将用户反馈纳入产品的能力。

GraphQl可以通过订阅实时更新

当今许多应用程序的另一个重要要求是与服务器建立实时连接,以便立即了解重要事件。对于此用例,GraphQL 提供了订阅的概念。

当客户端订阅事件时,它将启动并保持与服务器的稳定连接。每当该特定事件实际发生时,服务器就会将相应的数据推送到客户端。与遵循典型“请求-响应-周期”的查询和变更不同,订阅代表发送到客户端的数据流。