基于 GraphQL 平台化 BFF 构建及微服务治理( 二 )
考虑到绝大部分的情况 , App版本发布之后 , 对应的接口一般不会做大的调整 , 特别是两三个版本以前的代码 , 调整的概率更低 。 因此我们引入了路由的能力来解决这个问题 。
不同的版本或者iOS/Android端映射到不同的API接口上 , API内处理GraphQL的调用和JSON模板映射
每次需要开发新版本接口的时候 , 可以简单的复制以前逻辑到新版本接口上 , 然后做适当的调整
需要处理历史版本逻辑的时候 , 找到对应API , 进行调整即可
这样BFF里的逻辑可以始终保持相对清晰 , 不同版本的逻辑都可以相互解耦 。 虽然会存在一定的代码拷贝的问题 , 但是长期的维护上来说更加清晰了 , 而且也可以通过增加字段审计的能力来缓解代码拷贝所带来的问题 。
【基于 GraphQL 平台化 BFF 构建及微服务治理】03平台化构建BFF层
针对上面一节里提到的三个问题和对应的解决方案 , 下面分别做详细的介绍
数据获取:多领域的按需取数和数据聚合——引入GraphQL
数据转换:一种JSON结构转换成另外一种——引入JSON模板
请求映射:多版本兼容——引入路由能力
3.1GraphQL简单介绍
我们先对GraphQL做一下简单的介绍 , 关于GraphQL更详细的内容可以浏览官网graphql.org了解 。
GraphQL从名字上就能看出来和SQL有些类似 。 它首先定义了一套类型系统 。 这里以官方的例子说明 。
typeQuery{hero:Character}typeCharacter{name:Stringfriends:[Character]homeWorld:Planet}typePlanet{name:Stringclimate:String}官方定义了一套以《星球大战》背景的两个类型 , 角色和角色所属的星球 。 这里type可以对应到Java语言中的class , 初看起来和Java语言没有太大的差别 。
{hero{namefriends{namehomeWorld{nameclimate}friends{namehomeWorld{nameclimate}friends{name}}}}}这是一段GraphQL的query语句 , 通过Query对象的入口 , 就可以开始对GraphQL对象进行查询了 。 它的查询语句有几个特性:
按需取字段 , 不需要的字段可以不查询 , 类似于SQL里的select
在类型定义的基础上 , 可以关联查询多个类型的数据 , 类似于SQL里的join(但不完全一样)
可以递归的对某些字段进行理论上无限深度的查询(上面例子里的friends , 不过一般会限制深度)
而在GraphQL的实现里 , 是通过实现DataFetcher的接口来获取真正的数据的 , 例如调用RESTful接口或者调用RPC接口 , 都是封装在这里 。 DataFetcher可以绑定在某个type的某个字段上 , 这样当访问到这个字段时 , GraphQL会自动调用这个DataFetcher来获取数据 , 没有使用到这个字段自然也不会请求 。 也是因为绑定到字段的原因 , 我们实现DataFetcher的时候可以聚焦在单一数据类型的获取上 , 而把多类型的数据关联交给GraphQL自己来完成 。
通过GraphQL这样的能力 , 我们即可以按需选择需要的数据字段 , 也可以让GraphQL自动帮助我们组装多个数据对象的数据 。
3.2引入GraphQL
从前面的介绍里可以发现GraphQL和SQL有很多相似之处 , 而且也很容易对应起来 。 所以业界之前对GraphQL也有个普遍的误解 , 需要后端把数据库直接暴露出来整合进GraphQL , 这样对后端的架构、数据库的性能都有非常大的侵入性 。 但是GraphQL实际的使用上 , 可以很方便的融入现在普遍应用的微服务和DDD的架构 。
文章图片
我们可以用GraphQL服务来替换原来的BFF层 , 这样后端原有的架构体系都不需要进行改变 , 只需要在GraphQL中实现RESTfulAPI到GraphQL的转换功能即可 。 这也是业界目前大部分公司使用的方案 。
- 电影|国家发改委:鼓励网络视频平台限时低价电影放映
- 央视|央视曝光直播电商以次充好乱象!有平台抽样不合格率达50%
- 微信小程序|小红书的付费推广获取流量方式有哪些?平台的4种主要营销工具都在这里了
- 化州市富美家电维修店整合行业招商运营资源的专业平台
- 饭饭1080°平台分析之生鲜电商平台如何选择ERP系统和SAAS系统
- 中文|爱数智慧CEO张晴晴:基于”情感“的人机交互,要从底层数据开始
- 客服|外包客服平台的客服是怎样接引顾客下单的
- 社区矫正中心|邯山区司法局推进“智慧社区矫正中心”建设,打造实战平台,提升矫正
- 昌江区珠山区区县服务商整合行业招商运营资源的专业平台
- 买斗整合行业招商运营资源的专业平台