旨在解决客户端应用程序(尤其是移动应用程序)与传统 REST API 交互时面临的挑战。REST 通常会导致数据过度获取或获取不足,并且复杂的 UI 组件需要多次往返。GraphQL 为构建和使用 API 提供了一种更高效、更灵活的替代方案。
GraphQL 的基本原则:
API 的声明式查询语言:与 SQL 类似,GraphQL 也是声明式的,但它在 API 层进行操作,而不是直接在数据库上操作。客户端声明他们到底需要什么数据来自 API。
模式驱动(类型系统):GraphQL API 由强类型系统(Schema)定义,该系统指定了所有可能的数据类型、字段和关系。客户端查询时会参考此 Schema。这提供了自文档功能,。
单个端点:与 REST 不同,通过不同的 URL 访 拉脱维亚电话营销数据 问不同的资源,GraphQL API 通常公开单个端点(例如,/graphql),所有查询都会发送到该地址。
层次结构:查询会镜像您要检索的数据的层次结构。客户端在单个查询中请求嵌套对象及其字段。
自动遵循关系,类似于连接,但客户端定义连接深度。
客户端明确列出了确切的字段(客户编号,名,订单号等)它需要。
GraphQL 的优势:
禁止过度获取或获取不足:客户端可以精确地获取他们请求的数据,不多不少。这最大限度地减少了有效载荷的大小,这对于移动和慢速网络至关重要。
过度获取:当只需要名称时,REST 端点可能会返回完整的用户对象。
获取不足:获取关联数据可能需要多个 REST 请求(例如,获取用户,然后获取用户的订单,最后获取订单商品)。GraphQL 只需一个请求即可解决这个问题。
复杂数据的单一 API 调用:单个 GraphQL 查询可以获取复杂 UI 组件所需的所有数据,从而消除 REST 中常见的“N+1 问题”。北可能需要对相关数据提出额外请求。
前端敏捷性和快速原型设计:前端开发人员可以有效控制数据获取,无需等待后端更改。他们可以快速迭代 UI 需求。
强类型系统和自省:GraphQL 模式为字段和参数提供了强类型支持。这为客户端和服务器开发提供了强大的工具(自动补全、验证和错误检查)。自省功能允许工具动态地探索模式。