📜  GraphQL 与 RESTful 架构的比较(1)

📅  最后修改于: 2023-12-03 14:41:37.873000             🧑  作者: Mango

GraphQL 与 RESTful 架构的比较

概述

GraphQL 是一种用于 API 设计的查询语言和运行时环境。相比之下,RESTful 架构基于 HTTP 协议,使用各种 HTTP 动词(比如 GET、POST、PUT、PATCH 和 DELETE)来操作资源。

GraphQL 和 RESTful 架构各有优劣,本文将比较两者之间的不同点。

数据获取

RESTful 架构的主要限制是数据的获取方式。每个资源的 URL 仅返回与该资源对应的数据,而不包括与该资源互相关联的数据。这意味着客户端必须发出多个 HTTP 请求才能获取所需的所有数据。这种方法称为“过度获取”。

GraphQL 允许客户端指定其需要获取的数据。客户端可以定制它所需的资源、字段和媒体类型,并一次性获取所有该资源及其相关数据。这就意味着客户端只需发出一个请求就能获取所有所需数据,避免了网络延迟和资源过度获取的问题。

数据格式

RESTful 架构通常使用 JSON 或 XML 格式返回数据。这种返回格式在大多数情况下足够了,但在一些情况下仍可能出现问题。

GraphQL 不仅支持 JSON 和 XML,还能返回二进制格式和其他格式。此外,GraphQL 允许客户端只请求所需的字段,因此不必每次返回全部字段数据。

性能

由于 RESTful 架构的“过度获取”问题,客户端需要发出多个 HTTP 请求才能获取所有所需数据,从而降低了系统性能和速度。

GraphQL 始终返回所有请求的数据,因此客户端一次查询数据即可满足其所有需求。另外,可以使用缓存来提高性能。

缓存

RESTful 架构有优秀的缓存机制(比如 ETag)。由于当前 API 遵循 URI + HTTP 动词组合的方式,因此机器和人类都能很好地理解和处理缓存。

由于 GraphQL 进行的是一次请求,因此缓存很难进行。但是,GraphQL 可以使用 DataLoader 等缓存技术来实现类似的功能。

安全性

RESTful 架构则采用 JWT token 验证等方式,保护 API 的安全性。

GraphQL API 可以利用现有的身份验证和授权模式,还可以自定义身份验证和授权模式。

结论

综上所述,GraphQL 和 RESTful 架构各有优劣。GraphQL 具有更好的性能和可定制性,但可能需要额外的工作来提高缓存和安全性。RESTful 架构则更符合现有安全和缓存方法,但可能需要较多的 HTTP 请求和时间来获取数据。选择哪个一种 API 架构取决于项目需求和业务环境。

以上为 GraphQL 与 RESTful 架构的比较。