你还在用 REST API 吗?

点击上方 "程序员小乐"关注, 星标或置顶一起成长

后台回复“大礼包”有惊喜礼包!

程序员小乐(ID:study_tech)第 1098 次推文

每日英文

It is our choices... that show what we truly are, far more than our abilities.J. K. Rowling.

决定我们一生的,不是我们的能力,而是我们的选择。

每日掏心话

每个人都在争取一个完满的人生,然而,世界上没有绝对完满的东西。所以,有缺憾才是恒久,不完满才叫人生

作者:Harsha Vardhan | 来源:架构头条 | 责编:乐乐

往日回顾:华为员工违规领夜宵被发现后,被罚冻薪降考评,终身不得领夜宵,HR:哪个员工上班健身,定性考勤造假

     

   正文   

作者 | Harsha Vardhan

策划 | 田晓旭

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

1什么是 REST?

REST(Representational state transfer,表述性状态转移) 是一种 API 设计架构,用于通过使用一组预定义的无状态操作(包括GETPOSTPUTDELETE)来实现 Web 服务。

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

 REST 的优势

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

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

 REST 的劣势

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

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

2什么是 GraphQL?

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

在公众号程序员小乐回复“Java”,获取Java面试题和答案惊喜礼包。

 GraphQL 的优势

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

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

 GraphQL 的劣势

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

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

3两者对比的简单示例

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

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

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

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

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

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

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

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

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

4GraphQL 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 的经验,请在评论区留言,感谢您的阅读!

原文链接:

https://medium.com/javascript-in-plain-english/stop-using-rest-for-apis-d697727ae6dd

PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

欢迎加入后端架构师交流群,在后台回复“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

8年开发,连登录接口都写这么烂...

新来的妹纸 rm -rf 把公司整个数据库删没了!!!

B站,被扫黄了

BAT等大厂Java面试经验总结

别找了,想获取 Java大厂面试题学习资料

扫下方二维码回复「手册」就好了



嘿,你在看吗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值