现在的位置: 首页 > 移动开发 > 正文

怎样在微服务下基于GraphQL构建BFF

2020年06月09日 移动开发 ⁄ 共 2145字 ⁄ 字号 评论关闭

  对于微服务本身,我们可以参考MartinFowler对Microservice的阐述。简单说来,微服务是一种架构风格。通过对特定业务领域的分析与建模,将复杂的应用分解成小而专一、耦合度低并且高度自治的一组服务。微服务中的每个服务都是很小的应用,这些应用服务相互独立并且可部署。微服务通过对复杂应用的拆分,达到简化应用的目的,而这些耦合度较低的服务则通过API形式进行通信,所以服务之间对外暴露的都是API,不管是对资源的获取还是修改。下面学步园小编来讲解下怎样在微服务下基于GraphQL构建BFF?

  怎样在微服务下基于GraphQL构建BFF

  微服务架构的这种理念,和前后端分离的理念不谋而合,前端应用控制自己所有的UI层面的逻辑,而数据层面则通过对微服务系统的API调用完成。以JSP(JavaServerPages)为代表的前后端交互方式也逐渐退出历史舞台。前后端分离的迅速发展也得益于前端Web框架(Angular,React等)的不断涌现,单页面应用(SinglePageApplication)迅速成为了一种前端开发标准范式。加之移动互联网的发展,不管是MobileNative开发方式,还是ReactNative/PhoneGap之流代表的Hybrid应用开发方式,前后端分离让Web和移动应用成为了客户端。客户端只需要通过API进行资源的查询以及修改即可。

  BFF概况及演进

  BackendforFrontends(以下简称BFF)顾名思义,是为前端而存在的后端(服务)中间层。即传统的前后端分离应用中,前端应用直接调用后端服务,后端服务再根据相关的业务逻辑进行数据的增删查改等。那么引用了BFF之后,前端应用将直接和BFF通信,BFF再和后端进行API通信,所以本质上来说,BFF更像是一种“中间层”服务。下图看到没有BFF以及加入BFF的前后端项目上的主要区别。

  1.没有BFF的前后端架构

  在传统的前后端设计中,通常是App或者Web端直接访问后端服务,后台微服务之间相互调用,然后返回最终的结果给前端消费。对于客户端(特别是移动端)来说,过多的HTTP请求是很昂贵的,所以开发过程中,为了尽量减少请求的次数,前端一般会倾向于把有关联的数据通过一个API获取。在微服务模式下,意味着有时为了迎合客户端的需求,服务器常会做一些与UI有关的逻辑处理。

  2.加入了BFF的前后端架构

  加入了BFF的前后端架构中,最大的区别就是前端(Mobile,Web)不再直接访问后端微服务,而是通过BFF层进行访问。并且每种客户端都会有一个BFF服务。从微服务的角度来看,有了BFF之后,微服务之间的相互调用更少了。这是因为一些UI的逻辑在BFF层进行了处理。

  怎样在微服务下基于GraphQL构建BFF

  从上文对BFF的了解来看,BFF既然是前后端访问的中间层服务,那么BFF和APIGateway有什么区别呢?我们首先来看下APIGateway常见的实现方式。(APIGateway的设计方式可能很多,这里只列举如下三种)

  1.APIGateway的第一种实现:一个APIGateway对所有客户端提供同一种API

  单个APIGateway实例,为多种客户端提供同一种API服务,这种情况下,APIGateway不对客户端类型做区分。即所有/api/users的处理都是一致的,APIGateway不做任何的区分。如下图所示:

  2.APIGateway的第二种实现:一个APIGateway对每种客户端提供分别的API

  单个APIGateway实例,为多种客户端提供各自不同的API。比如对于users列表资源的访问,web端和App端分别通过/services/mobile/api/users,/services/web/api/users服务。APIGateway根据不同的API判定来自于哪个客户端,然后分别进行处理,返回不同客户端所需的资源。

  3.APIGateway的第三种实现:多个APIGateway分别对每种客户端提供分别的API

  在这种实现下,针对每种类型的客户端,都会有一个单独的APIGateway响应其API请求。所以说BFF其实是APIGateway的其中一种实现模式。

  GraphQL与REST

  GraphQLisaquerylanguageforAPIsandaruntimeforfulfillingthosequerieswithyourexistingdata.GraphQLprovidesacompleteandunderstandabledescriptionofthedatainyourAPI,givesclientsthepowertoaskforexactlywhattheyneedandnothingmore,makesiteasiertoevolveAPIsovertime,andenablespowerfuldevelopertools.

  以上就是关于“怎样在微服务下基于GraphQL构建BFF”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.