作者:Hirwa Blessing
许多开发人员更喜欢通过超文本传输协议发送数据,因为他们在创建应用编程接口时不需要安装额外的软件或库,尽管GraphQL通常是作为一种技术引入的,以取代传统的REST应用编程接口。在这篇文章中,我将解释这两者之间的好处、限制和区别,这将帮助您决定为下一个项目选择什么。所以废话不多说,让我们直接进入其中。
什么是REST?
REST(表示状态转移)是一种架构风格,用于在网络上的计算机系统之间提供标准,使系统之间更容易相互通信。通过REST,您可以分离客户端和服务器的实现,为了实现这一点,我们使用无状态操作,包括(GET、POST、P和DELETE)来发送和接收资源。 这种REST架构背后的想法是,您可以通过向资源的网址发出请求来检索资源,并获得响应(通常是JSON,但这取决于应用编程接口)。
REST的好处
- Rest是可扩展的,因为它将客户端与服务器分开,并使您能够轻松扩展应用程序。
- 灵活性是REST的另一个优势,因为数据不与资源或方法绑定,因此REST可以处理不同类型的调用并返回不同的数据格式。
REST的局限性
过度获取:这是指API端点提供的信息远远超过客户端所需的信息。
正在提取:这是指应用编程接口端点没有提供所有必需的信息。因此,客户端必须发出多个请求来获得应用程序所需的一切。
我们将使用一个例子来很好地理解上面的概念
什么是GraphQL?
GraphQL是API的查询语言,也是使用现有数据实现这些查询的运行时。GraphQL为您的API中的数据提供了一个完整且易懂的描述,为客户提供了准确要求所需内容的能力,仅此而已。除此之外,它还允许您将不同的实体组合到单个查询中。
GraphQL的好处
- 检索精确的数据,没有任何额外的东西。在GraphQL中,你得到你所要求的,仅此而已,这很好。
- 客户端的更快发展。通常,当数据需求发生变化时,您只需要修改查询,不需要太多变化,从而允许快速的产品迭代。客户端和服务器开发团队都可以独立工作,只要两个团队都知道数据的结构。即客户端和服务器实现彼此独立。
比较两者的例子
例如,让我们假设,我们正在显示一个用户的提要,其中包含该用户的帖子和his/her追随者的列表。在我们的例子中,我们必须显示帖子的作者、帖子以及该用户的追随者。 如果我们使用REST,我们至少会提出2或3个请求,类似于:
- /user/获取用户(作者)详细信息可能的用户名。
- /user//posts获取该用户发布的帖子列表。
- /user//followers获取该特定用户的关注者列表。
但在所有这些情况下,我们都在过度获取数据。例如,在第一个请求中,我们只需要名称,但是当我们使用这种方法时,我们得到了与用户相关的所有细节。 这是GraphQL展示其潜力的时候。我们需要指定查询,我们可以得到所需的输出。为了使用GraphQL实现相同的功能,我们可以使用类似于以下的查询:
query {
User(id: '123') {
name
posts {
title
}
followers {
name
}
}
}
通过使用这样的查询,我们将能够获得具有以下属性的JSON响应。干净简单,对吧?
GraphQL vs REST
综上所述,GraphQL和REST之间有一些突出的区别:
1.数据提取
REST会导致过度提取或不足提取**,而**GraphQL的情况并非如此。在GraphQL中,_你所要求的就是你所得到_的。
2.对象定义(JSON响应)
在REST中,您可以在后端定义请求对象,在GraphQL中,您可以在前端定义对象。
3.自动缓存
REST自动实现缓存,而GraphQL没有自动缓存系统,但是使用Apollo Client、Relay等客户端将使缓存成为可能。缓存使您的客户端能够响应相同数据的未来查询,而无需发送不必要的网络请求
4.错误处理
与GraphQL相比,REST中的错误处理要简单得多,GraphQL通常会给你一个200 OK的状态代码,即使有错误。但是,当使用Apollo Client、Relay等客户端时,很容易处理错误。
结论
GraphQL当然比REST有很多优势,但它可能并不总是最好的实现。就像我之前说的,选择取决于您的应用程序,是选择REST还是GraphQL。
我希望这能帮助你在未来的项目中做出决定。如果您想分享有关GraphQL或REST的经验,请将它们放在评论部分。别忘了在推特上和我联系 领英。感谢您阅读?!
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!