REST API和GraphQL API的比较

REST API

REST API

REST(表述性状态传输)API 是一种应用程序接口 (API) 的架构风格,它使用 HTTP 请求来访问和使用数据。该数据可用于GET、PUT、POST和DELETE数据类型,指的是对资源的读取、更新、创建和删除操作。
RESTful API 使用 HTTP 方法在处理数据时执行 CRUD(创建、读取、更新和删除)过程。
为了促进缓存、AB 测试、身份验证和其他过程,标头向客户端和服务器提供信息。
主体包含客户端想要传输到服务器的数据,例如请求的有效负载。

GraphQL API

GraphQL API
GraphQL 是一种用于 API 的查询语言,也是使用现有数据完成这些查询的运行时。GraphQL 为您的 API 中的数据提供完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,随着时间的推移更容易发展 API,并启用强大的开发人员工具。GraphQL 已被 Twitter、Expedia、Shopify 等知名组织广泛采用,主要由 GraphQL 基金会维护和开发。

GraphQL 与 REST:

差异
GraphQL 和 REST API 之间的主要区别在于 GraphQL 是一种查询语言,而 REST 是一种基于网络的软件的架构概念。
同样,将数据提供给客户端的方式是 GraphQL 和 REST 分歧最大的地方。在 REST 设计中,客户端提交 HTTP 请求,数据作为 HTTP 响应返回。在 GraphQL 架构中,客户端提交查询以获取数据。

典型场景

REST API

假设您有一个 API 来获取学生数据。在典型的 REST 场景中,请求/响应如下所示:

// HTTP REQUEST
GET api/students/1 || api/students?id=1

// HTTP RESPONSE
{
   "id": 1
  "name": "john doe",
   "class": 3,
   "age": 11
}

在上面的示例中,对发送到服务器的请求的响应将是关于 id 为 1 的学生的所有数据的对象。由于
过度获取的性质,这有时可能需要更长的时间,具体取决于数据的大小休息

GraphQL图形QL

在 GraphQL 中,如果通过严格列出所需字段的数量来获取数据。这限制了一次获取所有数据。考虑下面使用 graphQL 获取用户数据的 GIF。

动图动图1

)在 GraphQL 和 REST 之间进行选择时要考虑的事项

安全

REST API 使用 HTTP,允许使用传输层安全性进行加密,并提供多种 API 身份验证选项。TLS 确保两个系统之间的数据传输是私密且未更改的。支持 JavaScript 对象表示法 (JSON) 的 Web 令牌完成 HTTP 身份验证过程,以便从 Web 浏览器安全传输数据。

GraphQL 的安全控制不如 REST API 中的安全控制发达。为了利用 GraphQL 中的数据验证等当前功能,开发人员必须设计新的身份验证和授权技术。

可用性

REST API 使用 URI 和 HTTP 技术,这使得 API 很难预测在联系新端点时会发生什么。REST 中缺少指定的版本控制要求允许提供者采用他们自己的方法。

使用 GraphQL,您可以向您的 API 发送请求并接收准确的响应,而无需进一步添加。因此,来自 GraphQL 查询的极其可预测的响应提供了良好的可用性。GraphQL 采用了一种直接的方法并且不对 API 进行版本控制。

表现

开发人员只需一次 API 请求即可使用 GraphQL 获取数据。为了避免数据获取不足和过度获取,灵活的样式定义了信息请求的结构,并从服务器返回相同的结构。

与 GraphQL 相比,REST API 具有严格的数据结构,可能首先返回不相关的信息(过度获取)。由于请求需要时间才能到达正确的数据并提供相关信息,因此开发人员必须进行多次调用。

缓存

REST API 的所有 GET 端点都可以缓存在服务器上或通过 CDN。它们也可以由客户端存储以供经常使用,并由浏览器缓存。GraphQL 通过单个端点提供,通常是 (/graphql),并且与 HTTP 规范不同。因此,无法像 REST API 那样缓存查询。

但是,由于可用的工具,客户端缓存优于 REST。一些使用缓存层的客户端(Apollo Client,URQL)使用 GraphQL 的模式和类型系统,允许它们在客户端保留缓存。

错误处理

每个 GraphQL 请求、成功或错误都会返回 200 状态代码。与 REST API 相比,这是一个明显的区别,在 REST API 中,每个
状态代码都指向某种类型的响应。

Status CodeRESTGraphQL
200OkOk
400Bad Request-
401Unauthorized-

REST API 的错误可以有 200 以外的任何代码,处理错误的客户端应该知道所有可能的代码。

GraphQL 中的任何合法答案都应该是 200,包括数据和错误响应。客户端工具将有助于更有效地管理错误。错误作为特定错误对象下的响应主体的一部分进行处理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youtian.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值