您应该使用 GraphQL 而不是 REST API 的 4 个理由
REST 一直是许多开发人员首选的数据发送方式,HTTP
因为他们在创建数据时无需安装额外的软件或库。API
尽管 RESTGraphQL
通常被引入作为替代遗留技术的技术REST APIs
。在本文中,我将解释这两者之间的优势、局限性和差异,这将帮助您决定在下一个项目中选择哪种方式。事不宜迟,让我们开始吧。
什么是 REST?
REST(表述性状态转移)是一种架构风格,用于在 Web 上的计算机系统之间提供标准,使系统之间更容易相互通信。REST
为了实现这一点,我们将客户端和服务器的实现分开,并使用无状态操作(包括GET
、POST
、PUT
和DELETE
)来发送和接收资源。
这种架构背后的想法REST
是,您可以通过向资源的 URL 发出请求来检索资源并获得响应(通常是JSON
,但取决于API
)。
REST 的好处
-
Rest 具有可扩展性,因为它将客户端与服务器分开,并使您能够轻松扩展应用程序。
-
灵活性是 REST 的另一个优势,因为
Data
它不受资源或方法的约束,因此REST可以处理不同类型的调用并返回不同的数据格式。
REST 的局限性
过度获取:这是指 API 端点提供的信息远远超出客户端所需的信息。
获取不足:这是指 API 端点未提供所有必需信息的情况。因此,客户端必须发出多个请求才能获取应用程序所需的所有信息。
我们将通过一个例子来更好地理解上述概念
什么是 GraphQL?
GraphQL是一种 API 查询语言,也是一个使用现有数据执行这些查询的运行时。GraphQL 为 API 中的数据提供了完整且易于理解的描述,使客户端能够准确地请求他们所需的数据,仅此而已。此外,它还允许您将不同的实体组合成一个查询。
GraphQL 的优势
-
检索精确数据,无需额外信息。在 GraphQL 中,您获取的只是请求的内容,没有其他额外信息,这一点非常出色。
-
客户端开发速度更快。通常,当数据需求发生变化时,只需修改查询,无需进行太多改动,从而实现快速的产品迭代。客户端和服务器开发团队可以独立工作,只要双方都了解数据结构即可。也就是说,客户端和服务器的实现彼此独立。
比较两者的示例
假设我们要显示某个用户的动态,其中包含该用户的帖子及其粉丝的列表。在本例中,我们需要显示该用户的帖子作者、帖子内容以及粉丝。
如果我们使用REST
,我们会提出至少 2 或 3 个请求,类似于:
/user/<id>
获取用户(作者)详细信息,例如用户名。/user/<id>/posts
获取该用户发布的帖子列表。/user/<id>/followers
获取特定用户的关注者列表。
但在所有这些情况下,我们都过度获取了数据。例如,在第一个请求中,我们只需要姓名,但使用这种方法时,我们会获取与用户相关的所有详细信息。
这正是GraphQL
它的潜力所在。我们需要指定查询语句,这样就能得到所需的输出。为了达到同样的效果GraphQL
,我们可以使用类似这样的查询:
query {
User(id: '123') {
name
posts {
title
}
followers {
name
}
}
}
通过这样的查询,我们将能够获得具有以下属性的 JSON 响应。简洁明了,对吧?
GraphQL 与 REST总结一下,和
之间有几个突出的区别:GraphQL
REST
1. 数据获取
REST
会导致过度获取或获取不足,而 则不会出现这种情况GraphQL
。在 中GraphQL
,你要求的就是你得到的。
2. 对象定义(JSON 响应)您可以
在中定义,并在中定义对象。REST
the request object
Backend
GraphQL
Frontend
3.自动缓存
REST
自动启用缓存,而GraphQL
没有自动缓存系统,但使用 Apollo Client、Relay 等客户端可以实现缓存。缓存使你的客户端能够响应未来对相同数据的查询,而无需发送不必要的网络请求
4.错误处理
REST
与 相比,中的错误处理要简单得多,即使存在 ,GraphQL
它通常会返回。但是,当使用 之类的客户端时,很容易处理错误。200 OK
status code
error
Apollo Client, Relay, etc
GraphQL 最适合以下场景
-
适用于手机、智能手表和物联网设备等带宽使用率较高的设备的应用程序。
-
需要在一次调用中获取嵌套数据的应用程序。
-
一种复合模式,其中应用程序从多个不同的存储 API 检索数据。
ConclusionGraphQL
确实比 有很多优势REST
,但它并不总是最佳实现。就像我之前说的,选择REST
还是取决于你的应用GraphQL
。
希望以上内容能帮助你在未来的项目中做出决策。如果你想分享你关于GraphQL
或 的经验REST
,请在评论区留言。别忘了在Twitter和
Linkedin上与我联系。感谢阅读😊!