你还在用 REST API 吗?要不换一个!

本文探讨了REST和GraphQL两种API设计架构的差异。REST以其灵活性和可扩展性著称,但可能存在过度抓取或抓取不足的问题。而GraphQL允许精确的数据检索,提升了客户端开发效率,但设置和缓存管理相对复杂。在选择技术时,应根据项目需求权衡这两者的优势和劣势。
摘要由CSDN通过智能技术生成

通过 HTTP 发送数据,许多开发人员已经在用 REST 了,而 GraphQL 通常被认为是一种代替遗留 REST API 的技术。本文将对比两者各自的优势、劣势以及它们之间的差异,希望能为你今后项目的技术选型提供帮忙。

1.什么是 REST?
REST(Representational state transfer,表述性状态转移) 是一种 API 设计架构,用于通过使用一组预定义的无状态操作(包括GET、POST、PUT和DELETE)来实现 Web 服务。

REST 的核心思想是,通过向资源的 URL 发送请求并获得响应(通常是 JSON,但这取决于 API)来检索资源。

REST 的优势
REST 是 可扩展的,因为它分离了客户端和服务端,因此我们可以轻松扩展应用程序。

灵活性 是使用 REST 的另一个优势,因为可以将其设计成处理不同类型的调用并返回不同的数据格式。

REST 的劣势
抓取过度——这是指 API 端点提供的信息比客户端所需要的要多得多。

抓取不足——这是指 API 端点并没有提供所需的全部信息。因此,客户端必须发出多个请求才能获取应用程序所需的全部内容。

2.什么是 GraphQL?
GraphQL 是一种 API 设计架构,它采用了不同的方法,在这种方法中,所有的东西都被视为一个表示其连接的图。这也意味着我们可以定制我们的请求,这样我们就可以从端点发出任何请求,并且能获得我们所请求的任何内容,仅此而已,无需更多操作。我们传递查询并得到响应。除此之外,它还允许我们将不同的实体组合到单个查询中。

GraphQL 的优势
检索精确的数据,无任何多余数据。在 GraphQL 中,可以得到我们所请求的内容,这是一个很大的优势。

客户端开发速度更快。通常,当数据需求发生变化时,我们只需修改查询,且无需太多的变更,因此可以快速进行产品迭代。客户端和服务端团队都可以独立工作,前提是他们都知道数据的结构。

GraphQL 的劣势
对于简单的应用程序来说,设置类型、查询等可能有点复杂,因为使用 REST 可以很容易地完成。

它使用的是 单个端点,而不是遵循 HTTP 规范进行缓存。在网络级别进行缓存是很重要的,因为它可以减少到服务端的流量。

3.两者对比的简单示例
例如,我们正在显示用户的供稿,其中包含用户的帖子及其关注者的列表。在我们的例子中,我们必须显示该帖子的作者、帖子以及该用户的关注者。

如果使用 REST,我们至少要发出 2 到 3 个请求,类似于:

/user/以获得用户(作者)的详细信息,比如名称。

/user//posts获取该用户发布的帖子列表。

/user//followers以获取该用户的关注者列表。

但是在所有这些情况下,我们都过度抓取数据了。例如,在第一个请求中,我们只需要名称,但是当我们使用这种方法时,我们将会获取该用户相关的所有详细信息。

此时就是 GraphQL 显示其强大功能的时候了。我们需要指定查询,然后才能获得所需的输出。要使用 GraphQL 实现相同的效果,我们可以使用类似于这样的查询:

query {
User(id: ‘123’) {
name
posts {
title
}
followers {
name
}
}
}

通过使用这样的查询,我们将能获得具有以下属性的 JSON 响应。简洁明了,不是吗?

4.GraphQL vs REST
总结一下,两者主要有如下几个明显的差异:

数据抓取

REST 会导致抓取过度或抓取不足,而 GraphQL 则不会这样。在 GraphQL 中,我们得到的就是我们所要求的。

对象定义(JSON 响应)

在 REST 中,我们可以在后端定义对象,而在 GraphQL 中,我们则要在前端定义该对象。

自动缓存

REST 能自动生效缓存,而 GraphQL 则没有自动缓存系统,但是可以借助 Apollo Client、Relay 等客户端实现缓存。

错误处理

REST 中的错误处理比 GraphQL 简单得多,GraphQL 通常会给我们一个 200 OK 的状态码,即使已经出现错误了。但是,当使用 Apollo Client、Relay 等客户端时,它也能很容易处理错误。

5.结论
与 REST 相比, GraphQL 当然更具优势,但它可能并不总是最佳实践。正如我前面所说的,是选择 REST 还是 GraphQL,取决于我们的应用程序。

希望本文能为大家在未来项目的技术选型中提供帮忙。如果大家想分享自己关于 GraphQL 或 REST 的经验,请在评论区留言,感谢您的阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值