REST API和GraphQL API的比较

REST API

REST API和GraphQL API的比较_第1张图片

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

GraphQL API

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

GraphQL 与 REST:

REST API和GraphQL API的比较_第3张图片
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。

动图REST API和GraphQL API的比较_第4张图片

)在 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 Code REST GraphQL
200 Ok Ok
400 Bad Request -
401 Unauthorized -

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

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

你可能感兴趣的:(graphql,restful,java)