进行 API 调用以检索所有产品 ID
//{ products (first: 100) {id }}
使用上述产品 ID 再次调用以检索所有产品变体
// { nodes(ids: [“product_id1”, “product_id2”, “product_id3”,…]) { …on Product { id title variants(first: 100) { edges { node { displayName } } } } } }
如您所见,我们仅向服务器发出两个请求即可检索所需的确切数据。这里我们解决了三个问题:过度获取、获取不足和 N+1 问题(下文将详细介绍)。
过度获取和不足获取数据
如上所示,RESTful API 可以获取超出所需的信息,例如产品名称、价格、类别等。这被认为是过度获取数据,因为我们不需要这些信息。
据获取不足,因为它无法为我们提供产品变体。而在 GraphQL 的情况下,我们确切地知道我们想要什么,并直接获取该信息,而不会过度或不足地获取数据。因此,我们处理的信息更少。这样,与 RESTful API 相比,GraphQL 可以节省时间和资源。
发展和学习曲线
在 GraphQL 中,开发查询很快,但学习曲线很困难,而在 REST 中,开发需要花费时间,但学习曲线适中。
一致性
在 GraphQL 中,由于我们使用单个 URL 进行查询,因此所有平台上的一致性都是相同的。相比之下,很难确定 REST API 中的一致性,因为对于不同的平台,我们会进行其他 API 端点调用。不仅如此,GraphQL 还提供了一致的基于浏览器的集成开发环境 (IDE),可以将其安装在服务器上,以便从任何地方轻松查询数据。
缓存
在处理大型系统时,必须有一个缓存机制,以便快速访问更常用的数据,而无需进行数据库调用。对于 RESTful API,我们可以拥有自己的缓存系统,也可以默认使用 HTTP 级缓存。不幸的是,GraphQL 默认不支持 HTTP 级缓存。
回复
了解我们得到的响应格式非常重要。根据系统的设计,RESTful API 可以配置为支持多种响应格式(JSON、XML、HTML、YAML 等)。 GraphQL 仅支持 JSON 响应。
安全
安全性是现代网络的重要组成部分;GraphQL 和 REST 都有验证和授权客户端请求的方法,但 REST 的验证方法比 GraphQL 多。由于 GraphQL 是一项较新的技术,因此在安全性方面还不够成熟。
此外,GraphQL 的动态特性要求开 伊朗邮件列表 发额外的保护措施,以防止客户端发出消耗大量资源导致拒绝服务的请求。
版本控制
GraphQL 和 RESTful 都支持版本控制,但是 GraphQL 对版本控制有强烈的意见,相反,他们相信根据他们的最佳实践页面的模式的“持续演变” 。
GraphQL 和 REST API 的优缺点
讨论了差异之后,我们现在可以总结出每种方法的优缺点:
GraphQL 的优点:
通过一次 API 调用即可获取数据
它会自动保持文档与 API 同 黎巴嫩电话号码 100 万套餐 步
它是一种声明性查询语言,这意味着它可以让用户毫不费力地表达他们需要的数据
自动验证和类型检查
GraphQL 的缺点:
对客户端使用 API 端点的控制较少
如果你有一个小型应用程序,那么它就显得有点过度了
如果有复杂查询,可能会 印度尼西亚号码列表 出现性能问题
RESTful API 的优点:
RESTful API 可以快速开发和维护
开发人员可以创建基于特定需求的 API
该协议很容易理解