突然发现 v2 首页有两个阿里招聘贴,并且都有提到 Facebook 开源的 GraphQL。
阿里云 2020 校招内推,光速面试流程
(通过类 GraphQL+Serverless 实现接口聚合,减少前后端沟通成本)
t/587238
[阿里巴巴秋招] 飞猪用户技术,免笔试极速内推!可查进度
(参与端领域开源技术建设:Nodejs / Graphql / Serverless )
t/588764
去年 Linux 基金会成立了 GraphQL 基金会,今年亚马逊 AWS 宣布加入
https://aws.amazon.com/cn/blogs/china/aws-joins-the-graphql-foundation/
掘金、简书 上也有频繁发布的大量 GraphQL 各种相关博客
https://juejin.im/tag/GraphQL
https://www.jianshu.com/search?q=GraphQL
GitHub 上各种语言的开源实现都有了,Star 数基本都挺高。
https://github.com/search?q=graphql
V 站、知乎、技术群等也有很多关于 GraphQL 的讨论,看起来 GraphQL 已经是一个大趋势了。
https://graphql.org/
https://graphql.cn/
https://graphql.org.cn/
那么问题来了,都 9102 年了,大家有没有用上 Facebook 出的 GraphQL ?
1 StarkWhite OP 拉勾上好像也有很多要求会 GraphQL 的岗位了 |
2 darknoll 2019-08-05 12:16:16 +08:00 有没有啥资料让我学一下? |
![]() | 3 Cabana 2019-08-05 13:43:21 +08:00 via Android 还之前记得有个 v 友自己写的类似的框架不知现在咋样了 |
![]() | 4 yiyi11 2019-08-05 13:49:15 +08:00 via Android ![]() 那个男人,会来吗? |
![]() | 5 monkingame 2019-08-05 13:50:53 +08:00 用了,但没有 dart 的支持,暂时搁置了 |
![]() | 7 agdhole 2019-08-05 14:06:47 +08:00 那个男人,多久来呢 |
8 zqx 2019-08-05 14:10:25 +08:00 via Android 无数以聚合数据为无数的 node 项目都要重构了? |
9 yedanten 2019-08-05 14:18:16 +08:00 via Android 并不觉得好用 |
![]() | 11 herbertzz 2019-08-05 14:28:16 +08:00 不觉得好用 +1 |
![]() | 12 zjsxwc 2019-08-05 14:34:18 +08:00 GraphQL 其实还不如“古老”的结构化查询语言 SQL (Structured Query Language) 来的方便 |
![]() | 13 chendy 2019-08-05 14:35:53 +08:00 并不觉得好用 |
![]() | 14 whitehack 2019-08-05 15:17:22 +08:00 并不觉得好用 |
15 MrKou47 2019-08-05 15:31:50 +08:00 via iPhone 辣个男人还没有现身 |
![]() | 16 myyou 2019-08-05 15:34:13 +08:00 ![]() 我来代替辣个蓝人发言,个人认为 apijson 要好于 GraphQL |
![]() | 17 IsaacYoung 2019-08-05 15:35:02 +08:00 我以为香蕉君呢 |
![]() | 18 PDX 2019-08-05 15:44:11 +08:00 这种技术就是“可以有,但是没必要”,不要轻易尝试。 |
![]() | 19 source 2019-08-05 16:08:53 +08:00 @IsaacYoung #17 v2 香蕉君 |
![]() | 21 hirasawayui 2019-08-05 16:19:49 +08:00 我们.net 后端用上了 |
![]() | 22 razertory 2019-08-05 16:48:25 +08:00 没错,完爆 GraphQL ... |
23 wiix 2019-08-05 16:52:28 +08:00 ![]() GraphQL 无非就是把后端当数据库用,把前端当后端用而已。还隐藏了调用数据库的实现。企图革 SQL 的命但毫无希望。 |
24 Caballarii 2019-08-05 16:56:16 +08:00 GraphQL 革的是 REST 的命啊,为啥上面说革 SQL 的命??? |
![]() | 25 xuyl 2019-08-05 16:57:25 +08:00 很多人都不愿尝试改变,RESTful 还没普及,GraphQL 还有待时日 |
![]() | 26 razertory 2019-08-05 17:01:04 +08:00 ![]() 我们实践了两年 GraphQL。。。总体的感受实际上是后端会花更多的心思在设计 schema 上,前端是要自己写 GraphQL 代码,但是因为强类型 + 固定返回数据结构的模式下。可以很放心地 call api 而不必处理很多恶心的边界条件,当然 API 文档。。。你懂的,为啥要写文档呢 |
![]() | 27 abcbuzhiming 2019-08-05 17:09:06 +08:00 我坚信自己没看错,这东西的好处在前端,锅要后端背,最重要的是这东西增加了成本,所以这玩意没戏。大公司可以靠强推火几年,中小型公司你根本推不下去 |
![]() | 28 passerbytiny 2019-08-05 17:24:46 +08:00 如果数据模型还要后端定义,那么 GraphQL 模式并不比 RESTful 模式省成本,更因为取消了中间层大大降低灵活性。 如果完全不要后端,那么成本有可能降低,但前端铁定要骂娘。而且这种模式也不是啥新模式,这就是以前的 C/S 模式,只不过 C 端从 VB、C#变成了 Javascript。 楼主你列举的这些例子,看起来都虚的很,就像某大 V 推荐了一个牛逼东西一样。该关键字在(划重点:中立)搜索引擎上大红这代表了真正有很多人在用或者在学习它,才能表示发展趋势良好。 |
![]() | 29 passerbytiny 2019-08-05 17:38:58 +08:00 ![]() 多看了下楼主的主页,竟然发现是之前问“ Java 为什么不能热部署的”的作者。楼主如果不是编程初学者,则不需要看我后面的话。如果是,建议还是踏实点,从 Java、Javascript、SQL 的基础学起,不要搞 apijson、play、GraphQL 这些快速开发但高度封装(并隐藏细节)的工具。 |
30 wentaoliang 2019-08-05 18:02:51 +08:00 尝试了几次,前端是用的爽了,后端一点都不爽,要知道大部分时候都是后端说了算。 |
31 lolizeppelin 2019-08-05 19:20:57 +08:00 好像 openstack 里 fileds 的用法... |
![]() | 32 finian 2019-08-05 19:45:43 +08:00 ![]() 在生产环境用了几年了,真香。楼上那些带着偏见的、搞不清概念的,建议用用再发表高见吧。还革 SQL 的命。。。先把人家是用来干嘛的搞清楚吧 |
![]() | 33 winglight2016 2019-08-05 20:31:03 +08:00 @finian 好多人明显没有用过,批评都没批评到点子上 |
34 icy37785 2019-08-05 21:00:39 +08:00 via iPhone 并不好用+10086 |
35 wszgrcy 2019-08-05 21:14:26 +08:00 via Android 去年用的 nestjs+graphql,还要 |
![]() | 36 nyaapass 2019-08-05 21:16:28 +08:00 辣个男人居然还没有来 |
![]() | 37 libook 2019-08-05 21:22:25 +08:00 没有银弹 |
![]() | 38 zjsxwc 2019-08-05 21:23:02 +08:00 via Android 说通俗一点,graphql 对于后端来说该写的接口还是要写,上了 graphql 后,后端的每个接口,变成了类似数据库表资源的存在,于是前端可以写出等价于 sql 的查询语句: “ SELECT apiXXX1 WHERE arg1=aaaa AND arg2=bbbbb; SELECT .....” 等价于 {result1:apiXXX1(arg1:aaaa, arg2:bbbbb), result2: apiXXX2......} 前端同学的需求痛点是 1. graphql 可以一个请求完成对原先多次请求的查询,这样就不用 promise 等异步处理了。 但一般来说后端不用 graphql 也能做到一次请求性合并处理多个接口请求,无非是加一个循环而已。 2. graphql 可以通过 schema 约定接口请求与返回的强参数类型。 这个其实前后端本来就能通过接口文档的形式约定,原本是程序员基本素养问题,现在通过强制代码编写约定,我觉得可以提倡,但不少人会不乐意写因为麻烦。 3. graphql 可以过滤掉不需要的字段,减少网络带宽。 虽然减少网络带宽,但服务器查询执行业务的消耗仍旧不变,而且对于大部分业务来说,前端获取的数据越多越好,很少有人会为了省那点带宽干这事情。 |
![]() | 39 xingyue 2019-08-05 21:28:08 +08:00 via Android 说辣个男人的都是在脑子里建了用户表么 233333~我看到第二个回复才反应过来看来我的索引待优化 TAT |
![]() | 40 Les1ie 2019-08-05 21:32:42 +08:00 3 个月前刚写过一个项目,一个人写的。 前端 vue+mint-ui 后端 django+django-graphene 数据库 mysql redis 体验良好,前后端传递数据的时候感觉很方便,比较清晰 存在的问题: 安全性 由于 graphql 的代码即文档,他的自省大大方便了攻击者,可以很容易得到前后端交互的逻辑,信息泄露比 rest 严重 开发者如果不了解 graphql 的这些功能,可能写出来有巨大安全隐患的代码 学习曲线 rest 上手更快,graphql 和平时写 web 的方式有点区别,需要学习很多东西才能开始上手,而且文档不是很丰富,django-graphene 的官方文档写得非常简单,甚至看完了可能也不够写完一个项目 |
![]() | 41 husinhu 2019-08-05 21:39:41 +08:00 ![]() 那个男人被处理了,不会来了。 |
42 leven87 2019-08-05 21:53:58 +08:00 graphql 是一种前后端数据传输的方式,优点是代码即文档,非常直观,方便前后端同学交流。 还有通过 schema 定义数据格式,使得数据形式显得更加清晰,对于开发也是有帮助的。现在的开发的趋势就是模块化,组件化,我个人觉得不错的。 Rest 的优点是更加灵活,接口对前端屏蔽了大量的细节。 文档来说,基本是英文资料,虽然不是非常多,但也是够用的。 |
43 jinliming2 2019-08-06 01:01:08 +08:00 via iPhone 那个男人弃坑,来不了了! |
![]() | 44 lincanbin 2019-08-06 01:42:15 +08:00 via Android 用过,不好用。 |
![]() | 45 alphatoad 2019-08-06 03:49:12 +08:00 via iPhone 为啥不用 protobuf |
![]() | 46 jamesliu96 2019-08-06 09:15:07 +08:00 via Android 会用,但没必要用 |
47 StarkWhite OP |
48 StarkWhite OP |
![]() | 49 tailf 2019-08-06 10:10:28 +08:00 ![]() 我的团队用了半年了,说下感受: 1. 表面上看是给前端创造价值 2. 表面上看后端的工作量增加了 3. 其实这个东西是造福后端的,或者说是造福整个项目的:因为它提供了真正优秀的前后端分离架构 4. 用上了 GraphQL 之后,软件质量显著提升,后端接口跨平台支持能力显著提升,后端接口可测试性显著提升 5. 缺点也是有的,后端响应时间容易失控,需要更强的后端代码把控能力才能用的开心 |
50 StarkWhite OP |
51 StarkWhite OP @VDimos wo wei graphql dai yan |
52 StarkWhite OP 我也给 graphql 喂袋盐,哈哈 |
53 StarkWhite OP @myyou apijson 不是一个个人项目吗? graphql 后面有 fb 支撑 |
54 StarkWhite OP |
55 StarkWhite OP @monkingame graphql 主要是后端实现,和前端用 dart 还是 js 没太大的关系啊 |
56 StarkWhite OP @yedanten 不用再等后端给接口了,前端自己就能拿数据哈哈,还解决了 over fetch 的问题。。。 |
![]() | 57 skadi 2019-08-06 10:25:08 +08:00 辣个男人来了么? jxxxxxi 的那位. |
58 StarkWhite OP @razertory 什么鬼?谁完爆 GRAPHQL ? |
![]() | 59 tabris17 2019-08-06 10:29:09 +08:00 GraphQL,后端甩锅前端的工具 |
60 StarkWhite OP @abcbuzhiming 后端也省了很多事啊,不用组装接口了 |
61 StarkWhite OP @wentaoliang 后端也省了很多事啊,不用组装接口了 |
![]() | 62 myyou 2019-08-06 10:34:26 +08:00 @StarkWhite graphql 只是 fb 贡献了一个协议,任何人都可以根据协议实现自己的 graphql,谈不上 fb 支撑。 |
![]() | 63 nicoljiang PRO graphql 跟 restful 一样,只是一个思路或 Guide 吧。 |
64 karllynn 2019-08-06 11:08:27 +08:00 感觉没啥优势,类似的解决方案有很多。 最大的作用可能将来方便用 AI 替代人写 CURD,让一批人下岗( |
![]() | 65 Tonni 2019-08-06 11:21:08 +08:00 Graphql 用起来确实方便,接口非常灵活,我以前做过一个 demo 给团队里面介绍过,后来业务没需求也就没在线上使用 - https://github.com/HouCoder/graphql-presentation |
66 dcoder 2019-08-06 11:42:16 +08:00 本来 SQL 还有优化 SQL 就是一堆问题了, 现在好,来个更沙雕的 idea,把 SQL 弄到最前端去, 直接暴露在空气中随便弄... 好像所有的查询优化都可以魔法搬自动解决一样, 实在太脑残了 |
![]() | 67 abcbuzhiming 2019-08-06 12:36:05 +08:00 @StarkWhite 后端省事个毛,后端多了一堆事。这东西对后端的业务复杂性有任何降低吗?没有!它给了前端自由,但是这个自由你以为没代价的? |
![]() | 68 leopku 2019-08-06 12:41:27 +08:00 via iPhone ![]() 前面很多喷的能搞清楚再来喷么! 还特么说什么把 sql 弄到前端,你丫就整一个脑残玩意! |
![]() | 69 nigelvon 2019-08-06 13:02:05 +08:00 开喷麻烦先搞清楚一点行么? GraphQL 生产环境用了 2 年了,适合新项目,不适合老顽固后端。 有一定的门槛,水品差的没有按照 GraphQL 的逻辑来思考反而会增加工作量,还不如不用。 摸透了之后是真的爽,接口效率大幅提审,版本迭代快得飞起。 |
70 catcalse 2019-08-06 13:03:39 +08:00 都 9012 年了,大家还没有吃上热乎的翔。是道德的沦丧还是人性的扭曲 |
![]() | 71 nigelvon 2019-08-06 13:05:37 +08:00 @zjsxwc GraphQL 极其有价值的一点就是前端没有请求的属性可以不消耗资源去生成,到你这就变成“服务器查询执行业务的消耗仍旧不变”了?你确定你用过么 |
![]() | 72 zjsxwc 2019-08-06 13:26:05 +08:00 @nigelvon #67 原文:“@zjsxwc GraphQL 极其有价值的一点就是前端没有请求的属性可以不消耗资源去生成,到你这就变成“服务器查询执行业务的消耗仍旧不变”了?你确定你用过么” ====== 回复:到了业务层面,就算不反回某数据的字段,数据库也返回数据的,除非你不用 orm |
![]() | 73 leopku 2019-08-06 13:49:36 +08:00 @abcbuzhiming graphql 官网哪条宣传信息告诉你它是用来降低后端业务复杂性的?!!!能先搞清楚 graphql 的作用和在系统架构中的位置才来再喷吗? |
74 StarkWhite OP @winglight2016 我也觉得,talk is cheap,show me your code |
![]() | 75 monkingame 2019-08-06 13:57:22 +08:00 @StarkWhite 前端是需要的,比如有 apollo graphql 的 client 端,有 js ( react/vue/ng )、java、swift 等实现,但就是没有 dart 的。我现在要用 flutter 开发,必须找 dart 实现,但没有官方支持。 graphql 是 Facebook 提出来的,flutter 是 Google 的,估计两家尿不到一块去,dart 的实现目前只有第三方个人开发支持,很脆弱,目前 flutter 下只能作罢。 graphql 用过一段时间,感觉还不错,因为是从头自己设计开发的 App,没有包袱,所以逮着最新技术就用,反正掉坑里大不了躺着不出来。 我个人感觉,前端后端碰个头,自己写一套工具,隐藏掉存取细节,只暴露必须的数据接口,就是个微型的 graphql 了。 |
76 StarkWhite OP |
77 StarkWhite OP |
78 StarkWhite OP @xuyl RESTful 早就烂大街了啊,只是复杂的接口,用 RESTful 不好搞,前端调用多个 API 再提取和组装数据挺烦的,后端组装各种不同的接口给前端不同版本,不同客户端去调用,维护也很麻烦,然后 GraphQL 就出来了,前端就可以定制接口了,后端也省了很多工作量 |
79 yannxia 2019-08-06 14:07:46 +08:00 并不觉得好用 |
80 StarkWhite OP @catcalse 就你皮~ |
![]() | 81 monkingame 2019-08-06 14:16:03 +08:00 @StarkWhite 差不多这个意思吧,query 字符串到后台再分析处理,这是常规操作,再封装一下会更好。 可能 graphql 设计者是这样想的(我个人推测): restful api 比较 low,而且没有通用性,都是在分析字符串。那如果前后端传递的是类型数据呢,那就又高端又安全方便。 比如前端扔一个 class person 请求过来,要 person.name,后端看到请求,处理完毕,扔回 person.name 给前端,这就比字符串分析要高级多了,而且出错率还很低。毕竟是类型数据处理的话,语言层面就可以防止很多错误发生。 其实这些都可以自己写一个封装实现,但 graphql 提供了现成的方案,当然代价也是有的:学习并掌握 graphql,将现有体系转换为 graphql (尤其老旧项目苦不堪言)。 |
82 StarkWhite OP @icy37785 为啥不是 10010 ? 移动移不动,联通联不通,23333 |
![]() | 83 abcbuzhiming 2019-08-06 14:19:04 +08:00 @leopku 官网是没宣布,顶不住这贴里很多人认为这东西就是用来降低后端复杂性的 |
![]() | 84 abcbuzhiming 2019-08-06 14:37:14 +08:00 ![]() @
|