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

Java后端编程

共 2671字,需浏览 6分钟

 ·

2021-02-05 21:12

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

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

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

原文链接:

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


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


Java后端编程交流群已成立


公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了官方交流群。扫描下方二维码备注 进群 或者关注公众号 Java后端编程 后获取进群通道。



—————END—————


推荐阅读:



最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡
浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报