博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GraphQL和REST对比时需要注意些什么
阅读量:7091 次
发布时间:2019-06-28

本文共 1513 字,大约阅读时间需要 5 分钟。

\

在法国巴黎API日这上,Arnaud Lauret GraphQL和RESTful HTTP API各自的优点和缺点。从他的总结可以看出,是使用场景决定了具体该使用哪种API,而且这两类API在实际使用中会有很多的权衡考虑。

\\

是一种API查询语言,是由Facebook创建并最终的,可以认为是REST的一种替代品。来自AXA Banque的API架构师Lauret给出了一些可对二者进行比较的切入点:

\\
  • GraphQL能够通过一次查询得到所有需要的数据,从而减少网络跳转的次数。\\t
  • GraphQL采用所见即所得模型,这样客户端代码不易出错。\\t
  • RESTful HTTP通过使用状态码和HTTP verb,提高了结果的一致性和可预测性。\\t
  • 借助超媒体,在用户使用API时可以“发现”资源间的关系,这简化了RESTful用户的具体实现。\\t
  • HTTP实现了缓存机制而GraphQL还没有实现。\\t
  • GraphQL给用户提供了schema,这很有用,但是需要注意的是接口描述并非API文档。\

Lauret认为GraphQL的主要优势是其使用的(WYSIWYG)模型。也就是说,查询结果的结构是查询结构本身的精确映射,这样的话,用户在解排(unmarshal)响应的时候不容易出错。

\\

他也解释了为什么GraphQL模型可以减少网络跳转次数。对RESTful HTTP来说,资源和子资源可能存在于不同的节点上,所以需要多个请求才能获取到期望的数据的情况就在所难免。但是GraphQL却可以在单次请求中获取到所有期望数据。实际上,一次只查询系统中的一种资源是有可能的。

\\

虽然Lauret认为模型非常强大,但是他也解释了单端点方案可能带来的一致性和可预测性损失。相对于RESTful HTTP API,GraphQL不能正确使用HTTP verb会带来很明显的损失。举个例子,在使用RESTful HTTP时,当用户向资源发送了DELETE请求时,用户清楚这个操作是安全和幂等的,同时也清楚这个操作是用来删除资源的。

\\

Lauret指出GraphQL缺少HTTP状态码会带来可预测性损失,HTTP状态码是人机都可读的。相关的例子如当不能找到资源时返回的404状态码,或者用户没有权限访问时返回403状态码等等。

\\

REST充分利用了超媒体,也就是说通过遍历API,用户就可以发现链接和相关资源。这就消除了用户用于链接构建和给客户端返回资源关系等操作的需求。Lauret解释说因为GraphQL完全聚焦于数据,所以开发者会更加依赖于文档。

\\

因为HTTP缓存已经是web架构的一部分,所以Laure强调HTTP RESTful API使用了这种标准的HTTP缓存,而GraphQL的用户则需要自己实现缓存机制, 这种额外的负担其实是可以避免的。

\\

Lauret列出了GraphQL的最后一个优势,即提供schema,schema可以在运行时被获取到。当客户端决定可能的查询时,这非常有用。但是Lauret警告说接口描述不是文档,GraphQL不足以解决所有的API文档问题。

\\

作为总结,Lauret认为没有通用方案,只要是对当前需求有利的方案都可以使用。他也提到,由于高级API所具有的共性,如果用户不善于使用某种API,那么他们其实不善于使用任何一种API。完整视频可以通过在线观看,关于该演讲的总结可以参考。

\\

查看英文原文:

\\

感谢对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们。

转载地址:http://vaiql.baihongyu.com/

你可能感兴趣的文章
命令注入写webshell
查看>>
特么的程序员励志故事(小IT职员在北京5年买了500W的房子)
查看>>
Apache配置文件的含义
查看>>
NTFS有什么用途
查看>>
全选和反选 checkbox
查看>>
socket函数介绍
查看>>
显示锚点(纵横显示菜单)
查看>>
iOS应用架构谈(二):View层的组织和调用方案(中)(转帖)
查看>>
splitview.js在newipad上不能正确显示问题解决
查看>>
重置SQL Server表中的自动编号ID为1
查看>>
PL/SQL Developer如何连接64位的Oracle图解
查看>>
如何使用sublime编辑器运行python程序
查看>>
haproxy配置文件的语法检查
查看>>
wget
查看>>
Java 二进制,八进制,十进制,十六进制相互转换
查看>>
Java面试题之十一 (转)
查看>>
13个mysql数据库的实用SQL小技巧
查看>>
设计模式----抽象工厂模式
查看>>
struts1实现上传
查看>>
Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。
查看>>