GraphQL在惠农网的实践和落地

GraphQL是什么

GraphQL 是一种面向数据的API 查询风格。 传统的API 拿到的是前后端约定好的数据格式,GraphQL 对API 中的数据提供了一套易于理解的完整描述,客户端能够准确地获得它需要的数据,没有任何冗余,也让API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

目前公司开发接口的困境

1: 目前惠农网的前端存在多个不同的前端,不同的端在某一些业务层面的展示形式还是有所区别的 。
2: 目前一些业务在一些复杂的页面存在调用10+个接口的问题,导致前端开发起来难度较大。
3: 后端为了复用接口,存在一些接口返回了过多的数据给前端,让前端自己去选择,从而一些页面对于很多返回的字段不会进行使用
4: 前端如果想要后端进行部分业务的聚合,需要进行和多个服务端的开发进行沟通,服务端开发人员进行聚合也要内部进行沟通和协调,导致沟通成本越来越高
5: 目前服务端从在近100个微服务,可能在不同的地方进行了聚合大同小异功能的接口,这种开发无疑是难以维护和增加负担的

针对上面的问题,我们想通过一些技术手段或者约定来减少以上 说的问题。

后面经过 评估,最终选择了GraphQL来完成这个事情。

GraphQL所处的地位

目前我们使用GraphQL不是为了完全替代restful,而是对于在微服务体系中作为一个互补的能力。能搞把微服务进行业务梳理出不同的业务领域,然后通过GraphQL进行聚合。

这样做的好处:
1: 前端针对需要大量不同业务域的接口聚合可以按照自己的需要来进行数据获取,从而不需要在麻烦后端人员去开发
2: 前端调用接口也可以把之前的多个接口调用减少到1一次调用,减少了前后端的调用开销
3: 前端根据页面要展示的数据,自行获取,不会获取到多余的字段 ,对于网络层面的开销也有一定的提升
4: 后端人员只需要把稳定的业务域的数据一次性全量开发,就可以进行很多不同的业务和终端,真正的做到一次开发,多处使用,减少了业务重复开发的工作
5: 后端和前端通过schema进行沟通,可以有明确的记录领域的内容和字段,减少接口的维护成本

具体落地中的问题

因为我们的项目不是从头开发,已经有非常多的设施了,所以需要根据现在的技术基础做一些决策

1: 聚合的服务到底是前端团队负责还是后端团队? 针对这个问题在网上查了一些资料,感觉网上大部分都是前端团队进行负责的,都是基于nodejs进行开发的。但是基于现在所在团队的规模和技术能力,我们还是决定服务端放在后端团队,用java语言进行开发,基础框架也是基于springboot。

2: 聚合网关所处的位置,因为我们现在有基础网关,做了一些安全方面和鉴权方面的工作,所以业务聚合必然是放在基础网关之后,在业务逻辑层之前。

3: 哪些部分需要放到聚合网关,就需要根据设计的schema来进行确定,并不是所有的字段都是通过这个聚合网关进行返回到的。

4: 聚合网关graphql的定位,graphql不是为了替代现在的 restful,而是起到一个互补的作用,所以到底是走之前的restful模式还是走新的graphql的模式,这个选择权基本交给了前端,业务内聚高的页面,还是走之前模式,只有当一个页面汇聚了多个不同域的内容,才走graphql的聚合网关。另外,虽然graphql除开query之外,还有另外两种模式,但是在我们现在的场景中,暂时我们只考虑做接口query请求的聚合。

5: 因为聚合网关只有一个接口,那么这个接口突出的数据就会是巨大的,所以也需要考虑数据安全性的问题。

6: graphql入口只有一个,如何做好细粒度的监控也是一个需要考虑的问题,并且能够结合到现在的微服务的整个监控体系。

7: 因为聚合网关主要还是调用业务服务来拿到具体的数据,所以会牵涉到调用众多的底层服务,graphql如何高性能的调用底层服务,也是需要考虑的,暂时是通过 springboot+webflux+reactivefeign来进行底层调用,来提高接口的性能。

8: 对于graphql服务的异常处理,也需要进行确定。

9: 前端如何有效的根据要选择的字段来快速构造出前端请求query,也需要根据schema来确定,那么schema如何和服务端编写的保持一致。

10: 服务端的schema如何设计以及如何更新,也是长久迭代之前需要进行考虑和讨论的。

最后

因为这种模式的尝试也是一次技术的升级,所以难免在落地的过程中会遇到问题, 但是从现在业界的使用情况来看,我觉得我们现在对GraphQL的技术引入,针对聚合业务的特定领域还是利大于弊的。也希望有想法交流的也可以来进行沟通和交流

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容