GraphQL 到底有什么魔力?

7b483d5a78cd59812a3b9b76eee03a8a.png

GraphQL 起源

时间退回到 2012年的一个下午, 美国加利福尼亚州, facebook 的工程师们发现他们才上架没多久的移动端应用就收到了很多差评, 用户反映app响应慢,耗电严重等,经过分析后发现, 应用在第一次启动时, 会请求大量的后端api接口, 这其中包括用户自己的信息, 好友发布的内容, 以及其他的热点信息, 等等。太多的 rest api 请求, 这就是问题所在。

facebook 的工程师就开始思考如何才能解决这个问题, 在经过大量的技术讨论之后, 他们想出了一个好方法, 和 rest api 对应的是一个个 endpoint, 能不能整合这些 endpoint 变成一个整体输出到前端呢?

c3098124fe124712a645f8c08a6dba51.png

他们这样做了, 并且很好用, 这项技术在 facebook 内部沉淀了三年, 在2015年, facebook 公开发布了 GraphQL。

e9c8541be6d2b8268b9600bd33bdc7b1.png

到今天, 整个 GraphQL 生态系统、社区都已经非常成熟, 主流的开发语言按照 GraphQL 规范提供了实现, 并且有丰富的工具支持, Banana Cake Pop、GraphQL Playground 等。Github, Facebook 等公司都在生产环境使用了 GraphQL。

GraphQL 全称是 Graph Query Language,是一种查询语言, 像SQL, LINQ 都是常见的查询语言, 灵活且强大的查询功能是它的主要特点, 对于处理复杂的页面展示, 功能频繁变更, 这些都是 GraphQL 的强项, 为开发人员提供了极大的便利。

查询能力

向后端 API 发送 GraphQL 查询,它会准确的返回所需要的内容, 不多也不少!


e218952e3cc9e42ac02b957e496d38ca.gif

聚合能力


在 rest api 上获取多个资源时, 通常要进行多次url请求, 而使用 GraphQL 的查询功能, 一次请求就可以获取多个资源, 这正是 GraphQL 的数据聚合能力。

a23fb1af13030e62310a650c971e3f1c.gif

  GraphQL 的缺点 


当然 GraphQL 并不是完美的, 它也有一些缺点。

查询深度限制 因为 GraphQL 支持关联查询, 当你有一个树结构时,你可能要考虑限制查询深度, 防止过度递归带来的问题。
文件上传 上传文件对于 GraphQL 确实是个大难题, 规范中并没有提到这个, 一种方式是一些 GraphQL 的库自己实现了上传功能,另一个方法就是用单独的程序使用Http的方式提供上传功能。
缓存 和 rest api 相比, 由于 GraphQL 的查询功能很灵活, 动态查询, 不是固定的资源, 所以它的缓存不太好做。


GraphQL for .NET

  

如果要在.NET 平台上使用 GraphQL, 下面是最流行的两个库, 你可以尝试使用它

•graphql-dotnet
https://github.com/graphql-dotnet/graphql-dotnet
stars: 5k commits: 1600+ contributors: 140+

•hot chocolate
https://github.com/ChilliCream/hotchocolate stars: 3k commits: 2200+ contributors: 140+

79610e503514629097f5fbd04d11823d.png

我个人比较喜欢用 hot chocolate, 上手简单, 工具也很多, 而且有意思的都是以甜品命名的, 热可可(GraphQL Server, 草莓奶昔(GraphQL Client), 绿色甜甜圈(DataLoader), 香蕉蛋糕(GraphQL IDE)。

总结

GraphQL 起初是为移动应用构建的, 和 rest api 不一样的是, 它有出色的数据聚合能力和查询能力, 在处理复杂的页面以及需求快速迭代的场景时, 不过是探囊取物。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.

安装adb工具从以上地址下载,然后解压到任意目录(例如C:\adb).将此目录添加到windows环境变量path中.在cmd中输入adb, fastboot等命令,如果"显示"xxx"不是内部或外部命令命令",那么说明你弄错了,去了解一下什么是环境变量吧.如果显示一堆英文,那么说明安装完…

VBA即用型代码手册之打开有密码保护的工作薄

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率,而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想,积木编程最重要的是积木如何搭建…

⑥又是星期五,小试牛刀(编写定制标签)

前言 今天有点迷茫。是身体累了,还是心累了。有种觉得想大哭而无力的感觉(可能心还没成熟,或是昨天羽毛球打累了)。加油,Jeff Li. 活在当下,坚持打好基础,坚持刷ACM,坚持coding。 今天下午的小故…

技术分享|前端性能 关键性能指标以及测量工具介绍

源宝导读:对于一款商业软件产品而言,其性能表现往往会直接关系到它的生死存亡,这种说法一点也不夸张,数据显示,40%的人放弃了加载时间超过3秒的网站。但是一个网页的加载时间,响应时间的“快”“…

ELKstack-Elasticsearch各类安装部署方法

手动安装部署Elasticsearch 开篇 开篇闲话,如果是新人在接触ELKstack什么都不懂的情况下,可以先看看各位前人写的关于ELKstack的博客,如何对ELKstack部署安装及使用,但是别人的东西只能作为借鉴,在自己搭建使用一定要以…

美国超人气漫画科普书!85%以上中学物理考点,5岁孩子秒懂物理

▲ 点击查看今年的高考,不得不说,一度被浙江学霸刷屏!他总分720分,物理等3门满分的成绩,最终获得“浙江高考状元”。状元能摘得桂冠,除了日积月累的不断努力外,最重要的是,不断调整自…

gevent 学习笔记一

import geventdef a():print a starting....gevent.sleep(1)print a endingdef b():print b starting....gevent.sleep(1)print b endinggevent.joinall([gevent.spawn(a), gevent.spawn(b) ]) 结果显示,用gevent并不会因为gevent.sleep而造成阻塞,但用内置的time.s…

当前联机日志损坏恢复

2019独角兽企业重金招聘Python工程师标准>>> 环境模拟 删除状态为active的联机日志,然后强行关闭数据库 处理过程 SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1260720 bytes Variable Size 1426071…

权威杂志评选出的十个最伟大的公式,爱因斯坦的质能方程竟然只能排第六!简直神仙打架....

全世界只有3.14 % 的人关注了爆炸吧知识难决高下各有千秋当数学家得出方程式和公式,如同看到雕像,美丽的风景,听到优美的曲调等等一样而得到充分的快乐。——柯普宁公式,是数学世界中一道美丽的风景,一个小小的等式&am…

在Idea中测试各JVM语言的交互性

为什么80%的码农都做不了架构师?>>> 背景: 假设出现这样的场景,一个Java项目中,需要用其他语言来编写相关模块,但需要能被Java调用 测试工具:Idea12 测试语言:Groovy、Scala、Ko…

android pcm调节音量,调整PCM语音数据的音量

通过编程实现调整PCM的音量,具体做法是乘上一个固定的数,但是要考虑数据的溢出问题,代码如下://调节PCM数据音量//comment : 对PCM数据的音量进行放大//parameter :// pData PCM数据// nLen PCM数据的长度// nBitsPerSample 每个S…

.NET 大会今日开幕 |这些白嫖福利不看肠子都悔青

{ 12.18 线上开幕 文末有福利 }2021 .NET 开发者大会,今日开幕你是否已经满怀期待,同时又有很多疑问“ 会场在哪里?” "哪些大咖会参加?"“ 技术主题有哪些?” “ 什么时间有福利?”…时间不多了…

asp.net web常用控件FileUpload(文件上传控件)

2019独角兽企业重金招聘Python工程师标准>>> FileUpload控件的主要中能:向指定目录上传文件,该控件包括一个文本框和一个浏览按钮。 常用的属性:FileBytes,FileContent、FileName、HasFile、PostedFile。 常用的方法&a…

设计模式:面向对象的设计原则下(ISP、DIP、KISS、YAGNI、DRY、LOD)

本文继续来介绍接口隔离原则(ISP)和依赖倒置原则(DIP),这两个原则都和接口和继承有关。文章最后会简单介绍几个除了 SOLID 原则之外的原则。接口隔离原则(ISP)提起接口,开发人员的第…

ADB server didn't ACK

当我们通过eclipse开发Android应用时,会连接真机会使用模拟器进行仿真,有时候启动失败,会提示这样的错误。 工具/原料 Eclipse CMD命令窗口 方法/步骤 首先通过CMD启动adb服务。这个时候会提示启动失败。 服务启动失败的原因有很多&#xff0…

android方块密码输入框,Android仿微信/支付宝的方块密码输入框

在用到支付类或者验证类app时,都有一个简密的输入框。百度了下有个不错的帖子点击打开链接不过自己也写了个简单的类似的。不废话了。没图说个席八。懒得运行,直接截layout.xml的效果图先。布局文件android:layout_width"fill_parent"android:…

童鞋,[HttpClient发送文件的技术实践]请查收

昨天有童鞋在群里面问:怎么使用HttpClient发送文件?01荒腔走板之前我写了一个《ABP小试牛刀之上传文件》,主要体现的是服务端,上传文件的动作是由前端小姐姐完成的, 我还真没有用HttpClient编程方式发送过文件。不过Ht…