GraphQL:你的容颜,十万光年
What?
GraphQL 是一种类似于 SQL 的结构化查询语言,由 facebook 于2012年创造,于2015年开源。SQL 在服务端定义,GraphQL 在客户端定义,也就是说 GraphQL 将数据的操作控制权从后端转移到了前端。
facebook 创造 GraphQL 的目的是取代以前用的 Restful API,这个方案之漂亮,连 jQuery 之父也忍不住啧啧称叹:
Why?
传统的 Restful API 存在的主要问题是无法灵活、精准的匹配前端的数据需求。
首先,产品的需求经常变,于是前端需要的接口也经常变,比如遇到版本迭代,即便整个数据库结构没有任何变化,常常也需要重写或新增很多接口。其次,前端存在不同的平台,可能对同一类数据的请求,web 端和 app 端需要的字段是不一样的。
后端的接口要做到与前端的需求一一匹配,会极大的增加后端的工作量,于是后端可能会采取这样的方式:“为多个请求提供一个接口并集,而不是分别为每个请求单独提供接口”,“有现成可用,就尽量不新增接口”,比如前端需要两个接口 {1, 2}、{1, 3, 4},后端只需提供一个接口 {1, 2, 3, 4}。
于是前端对数据的需求和后端提供的接口常常无法精准匹配。前端总会遇到这样的情况:请求的接口常常返回很多冗余数据;为了拿到一组数据,不得不发送多个请求;请求到的数据不符合需要的格式,不得不做额外处理;有时某个接口就只少了一个字段……
一方面冗余的数据和多次的请求必然会影响产品体验,另一方面围绕 Restful API 建立的前后端协作模式会导致大量沟通成本,需要约定、需要接口文档、甚至还需要“联调”。
解决问题的办法可以是“深入推进前后端技术融合、全面加强前后端协作沟通、狠抓落实文档规范……”,这些都是办法,但对于 facebook 这种体量的产品,靠人力解决上述问题的成本可能是我们无法想象的,而且这也不像是技术人员解决问题的方式,至少 facebook 的工程师不这么想。
近年来 web 开发的基本趋势是从后向前移,越来越多的逻辑在前端处理,但是接口仍然需要后端提供,前端总是要等后端喂接口,后端写的接口总是要等前端来验证,那么为什么 SQL 不能让前端来写呢?这就是 GraphQL 提出的解决方案:由前端来定义所需数据、发送查询命令,服务器根据请求自动查询数据库并按指定的数据结构返回数据,用啥取啥,后端只提供服务,而不再关心具体的业务。
自动化实现,应该永远是每个程序员解决问题的第一思路。
How?
前端向服务端发送的 GraphQL 就是一串字符串,它的结构和 json 类似,其中包含增、删、改、查的指令,括号中定义了一些参数。服务端收到请求就会根据指定的指令、字段和参数返回所需的结构化数据。简单的说,就是前端发送只有属性名,而没有值的 json,服务端返回填充了值的 json。
具体的教程网上已有不少,在此不做深究。本文目的重在对技术的理解,而非对技术的使用。
Pros?
1、网络层数据无冗余。特别是在移动端,冗余数据可能带来不小的延迟;
2、前后端沟通成本低。根本用不着联调,后端也用不着写什么接口文档;
3、灵活应对各种变化。前端取数据跟吃自助餐似的,私人订制,予取予求;
Cons?
既然这么牛,怎么似乎没啥人用呢?
以下参考尤雨溪的回答:https://www.zhihu.com/question/38596306?sort=created
1、服务端结构必须符合 GraphQL spec 的规范,这意味着后端需要重写;
2、GraphQL 非常适合特定的前端框架如 React,对于不使用前端框架的公司,就比较尴尬了;
3、数据库查询这一层的性能优化比较难做,对于 facebook 这不是问题,对于其它公司可能就是个问题;
4、GraphQL 需要后端配合,然而由于路径依赖、风险厌恶等可能的因素,前端要推动 GraphQL 必然会遇到各种阻力。
转载于:https://www.cnblogs.com/kidney/p/7112648.html
GraphQL:你的容颜,十万光年相关推荐
- 震撼!世界从10亿光年到0.1飞米(ZT)
震撼!世界从10亿光年到0.1飞米 文章提交者:火石2 加帖在 猫眼看人 [凯迪网络] http://www.cat898.com 编者按: 偶然从网上看到这么震撼的一组图,就欣然把它扒下来配上文字据 ...
- 从十亿光年到0.1飞米
[摘]从十亿光年到0.1飞米 十亿光年,是一个什么概念呢? 光年,光走一年的路程.光速!它是速度公认的极限,每秒299792458米,能在眨眼间绕地球七圈半.看见么,就这么快的光,让他跑个一年,所度量 ...
- 从十亿光年到0.1飞米:从宇宙到细胞,从宏观到微观
转自:http://tieba.baidu.com/p/543439082?pn=1 十亿光年,是一个什么概念呢? 光年,光走一年的路程.光速!它是速度公认的极限,每秒299792458米,能在眨眼间 ...
- 震撼!世界从10亿光年到0.1飞米!
信息来源:mop 世界:从10亿光年到0.1飞米 编者按: 偶然从网上看到这么震撼的一组图,就欣然把它扒下来配上文字据为己有.因为不擅洋文,大多数内容是自己参考了资料串起来的,如有错误实属 ...
- 一沙一世界(10亿光年),科学的图文介绍
光年,光走一年的路程.光速!它是速度公认的极限,每秒299792458米,能在眨眼间绕地球七圈半.看见么,就这么快的光,让他跑吧,跑个一年,所度量出来的距离就是一光年了.现在各位把滑鼠移到萤幕的左下角 ...
- 从10亿光年到0.1飞米
关于该话题的主体网站是http://powersof10.com/它记录了人类迄今为止所能看到极限... 10亿光年十亿光年,是一个什么概念呢?光年,光走一年的路程.光速!它是速度公认的极限,每秒29 ...
- 体会视觉的震撼,从10亿光年到0.1飞米
偶然从网上看到这么震撼的一组图,就欣然把它扒下来配上文字据为己有.我真心推荐大家能够认真的读完它,相信这篇网志会改变很多人的世界观. 10亿光年 十亿光年,是一个什么概念呢? 光年,光走一年的路程.光 ...
- linux ipv6模块,有关Linux ipv6模块加载失败的问题
有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ipv6地址 ...
- 宇宙和世界真的是虚拟的吗?
来源:数学中国 2021年元宇宙无疑成为科技领域最火爆的概念之一,扎克伯格曾表示未来脸书将从一家社交媒体公司转变为一家元宇宙公司,之后元宇宙这个词席卷了整个互联网与投资圈.在大多数人还搞不懂元宇宙是 ...
最新文章
- C#用DesignSurface实现一个简单的窗体设计器
- Ubuntu创建新用户的正确姿势
- 如果编程语言是飞机 | 每日趣闻
- linux: convmv =-======pkgs.org
- ustc小道消息20211225
- oracle中备份package源码
- 在js在页面中添加百度统计代码
- Path环境变量的理解以及设置MinGW环境变量
- Weblogic读不到Word文件
- flutter ios打包_关于Flutter iOS打包报错的问题
- notepad++行首行尾添加字符
- linux 的空命令:(冒号)
- 表单从gb2312的页面提交到utf-8页面,或者表单从utf-8的页面提交到gb2312页面的解决办法...
- Atitit nodejs5 nodejs6 nodejs 7.2.1 新特性attialx总结
- 博弈论笔记:重复博弈
- 微信小程序赞赏功能,非微信赞赏功能
- red5源码分析---1
- factory(工厂) 模式简单示例
- 掏库存分享——抖音平台上可以用来当背景音乐的歌曲
- 程序员需要了解的常见的英文缩写的含义