你还在用 REST API 吗?

更新日期: 2020-07-02阅读: 1.5k标签: 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


链接: https://fly63.com/article/detial/10037

浏览器中的图像识别 API

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

JavaScript的API设计原则

Js的API设计原则总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详尽充实,如果有好的建议或者不对的地方,还望不吝赐教斧正。

适合写api接口文档的管理工具有哪些?

现在越来越流行前后端分离开发,使用ajax交互。所以api接口文档就变的十分有意义了,目前市场有哪些比较优秀的接口文档管理工具呢?比如:MinDoc,eoLinker,apizza,RAML,Swagger等等

前后端分离,如何防止api接口被恶意调用或攻击

无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了。目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提供便利的同时,也成了呗恶意攻击的对象,那么如何才能防止被恶意调用呢?

JSON API免费接口_ 免费的天气预报、地图、IP、手机信息查询、翻译、新闻等api接口

整理提供最新的各种免费JSON接口,其中有部分需要用JSONP调用。方面前端同学的学习或在网站中的使用,包括:免费的天气预报、地图、IP、手机信息查询、翻译、新闻等api接口

什么是RESTful API?

要弄清楚什么是RESTful API,首先要弄清楚什么是REST。REST -- REpresentational State Transfer,英语的直译就是“表现层状态转移”。如果看这个概念,估计没几个人能明白是什么意思。

认识 Fetch API

Fetch API 已经作为现代浏览器中异步网络请求的标准方法,其使用 Promise 作为基本构造要素。Fetch 在主流浏览器中都有很好的支持,除了IE。

用一个通俗的例子讲清楚API

随着移动互联网的发展, 基于互联网的应用正变得越来越普及,在这个过程中,更多的平台将自身的资源开放给开发者来调用。对外提供的API 调用使得平台之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。

docker提供api访问

环境centos,添加deamon.json后,dockerd命令可以启动docker,这时请求 127.0.0.1:2375 可以正常访问,使用systemctl无法启动docker的情况.无法启动docker:查看当前的docker配置

构建API的最佳编程语言是什么?

你是否正在设计第一个Web应用程序?也许你过去已经建立了一些,但是目前也正在寻找语言的变化以提高你的技能,或尝试新的东西。有了所有信息,就很难决定为下一个产品或项目选择哪种编程语言。

点击更多...

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