关闭

你还在用 REST API 吗?

时间: 2020-07-02阅读: 63标签: api

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


什么是 REST?

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

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

REST 的优势

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

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

REST 的劣势

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

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


什么是 GraphQL?

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

GraphQL 的优势

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

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

GraphQL 的劣势

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

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


两者对比的简单示例

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

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

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

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

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

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

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

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

复制代码

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


GraphQL vs REST

总结一下,两者主要有如下几个明显的差异:

数据抓取

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

对象定义(JSON 响应)

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

自动缓存

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

错误处理

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


结论

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

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

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


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/10037

关闭

[探索]怎么样的参数能让 JS - API 更灵活

外在决定是否需要了解内在,内在决定是否会一票否决外在。内外结合,好上加好。 开发 API 的时候,把参数的名字和位置确定下来,函数定义就可以说是完成了。

在 Node.js 上运行 Flutter Web 应用和 API

大量的跨平台应用开发框架,使你可以编写一次代码,然后在 Android,iOS 等多个平台上甚至在台式机上运行。你可能听说过一些流行的框架,例如 Ionic,Xamarin 和 React Native。另一个相对较新的框架是 Flutter

API接口设计,需要注意这4点

原则上API接口设计一般出现在开发的详细设计中,但是随着诸多公司建立开放平台,产品经理也逐渐需要能理解API接口,尤其是做平台性的产品,还要学会定义接口。本文就关于产品经理在设计接口中需要定义什么

Notification API,为你的网页添加桌面通知推送

其实,MDN 的说明已经可以让我们很清楚知道 Notification 的作用。Notification 能够为用户提供异步的桌面消息通知,即使你缩小浏览器或是活动在其他标签页,只要调用该 Api 的标签页没被关闭

使用 JS 来动态操作 css ,你知道几种方法?

JavaScript 可以说是交互之王,它作为脚本语言加上许多 Web Api 进一步扩展了它的特性集,更加丰富界面交互的可操作性。这类 API 的例子包括WebGL API、Canvas API、DOM API,还有一组不太为人所知的 CSS API

Vue中用的比较多的几个API

在Vue2.x中,当一个Vue实例创建好了以后,如果想要后续给该实例的某一个data添加属性,该属性是不会触发视图更新的,解决方法是使用Vue.set或者vm.$set方法添加指定属性。

JSON Web 令牌(JWT)是如何保护 API 的?

你可以已经听说过 JSON Web Token (JWT) 是目前用于保护 API 的最新技术。与大多数安全主题一样,如果你打算使用它,那很有必要去了解它的工作原理(一定程度上)。问题在于,对 JWT 的大多数解释都是技术性的,这一点让人很头疼。

浏览器中的图像识别 API

在 Native 开发中,Android 和 IOS 平台都在系统层面直接提供给了应用开发识别图像的一些能力,比如对于二维码/条形码的识别,Android 可以使用 barcode API 、 iOS 可以使用 CIQRCodeFeature API 。

Moment.js常用API速查

日常开发经常会用Moment.js来处理时间,现对频繁使用的几个API做下整理,以便日后查阅。

H5中的history方法Api介绍

history方法可以直接调用,例:history.pushState(),也可以用window.history.pushState()来调用。因为history是属于浏览器中的子对象,两种调用方法都是生效的;

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!