前后端,相煎何太急...

简介: 前沿:哈喽,我是树酱。今天分享的水文是关于前端与后端之间battle的那些事,自从前后端分离之后,这场分家带来了不少沟通问题,甚至产生battle。我们先回顾下前后端battle的前世今生

微信截图_20220514231851.png


前沿:哈喽,我是树酱。今天分享的水文是关于前端与后端之间battle的那些事,自从前后端分离之后,这场分家带来了不少沟通问题,甚至产生battle。我们先回顾下前后端battle的前世今生


1.远古时代 (web1.0 - MVC架构)


依稀记得刚大学毕业那会,电脑上安装的第一个IDE,不是Webstorm也不是VScode,而是IntelliJ IDEA。因为开发前端项目,需要跑完整的一个JAVA程序,各种maven配置,然后在后端编写的JSP文件基础上再进行前端开发,换句话说就是“二次开发”,现在想想当时编译慢的场景,历历在目。换句话说就是前端开发重度依赖环境


阿乐同学:我记得我当时就只提供HTML代码,然后用Sublime做编辑器就好了,然后最后再整合到JSP中去


这就是另外一种模式,前端负责输出demo Html,然后交给后端去套模版


只是说完全交由后端去整合,出错率较高,遇到 Bug 解决起来也很麻烦,需要双方协同处理。换来的更多的沟通成本。因为前后端的职责很容易纠缠不清,耦合性太强,最后还可能导致battle。


总结产生battle的点👇:


  • 1.前端开发重度依赖环境,导致每次修改文件编译时间过长,考验前端开发者的耐心
  • 2.当应用需要升级时,无法单独对前端、后端独立升级。而是对整个单体应用整体升级
  • 3.后端将前端预先开发好的html页面,嵌入到JSP文件后,实际样式效果偏差过大


微信截图_20220514231905.png


2.铁器时代 (web2.0 -MVVM架构)


前端MVVM架构的出现促进了前端开发与后端业务逻辑的分离,真正实现“分家”:分工协助、各司其职、拒绝捆绑。


这时候就需要一个“沟通桥梁”:API ,再通过ajax调用实现前后端之间的协作沟通。两者也解耦了


API消费者(前端):通过接口文档了解接口信息,聚焦点:接受数据、处理数据、处理渲染逻辑


API生产者(后端):提供接口以及接口文档  聚焦点:提供数据、提供API文档


开发流程也开始转变👇:


  • 后端编写和维护接口文档,在 API 变化时更新接口文档
  • 后端根据接口文档进行接口开发
  • 前端根据接口文档进行开发 + Mock平台
  • 开发完成后联调和提交测试


微信截图_20220514231913.png


啊乐同学:那前后端分离后,是后端同学先开发还是前端同学先开发?


从上面的开发流程我们可以看出,分家之后,接口文档是最关键的沟通桥梁。根据重要先行原则,文档就成为了首要因素,建议接口文档先行,也就是 API-First,没有接口文档前端几乎无法开工。


啊呆同学:对于前端同学接口联调用postman调试,mock用Yapi或者RAP2来生产假数据,有没有更好用的工具一步到位?


以前我也是左手一个postman,右手一个yapi,中间码着code


你可以试试 Apifox


官方介绍:Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter


前端同学可以用Apifox来解决接口调试+数据Mock的需求


下面分享一个实战页面截图


微信截图_20220514231940.png


但新的开发流程也暴露出新的battle点


总结产生的battle点:


  • 1.一个页面需要请求的接口太多,前端希望后端做接口聚合,减少请求次数,后端则认为接口是根据微服务划分职责的,无需耦合
  • 2.后端提供的接口发生变更,但接口文档却没有同步,或者后端提供接口缺失,前端无法正常mock等
  • 3.字段不统一:举个例子,手机号码的字段,有的返回 mobilePhone,有的返回 PhoneNumber,字段不统一导致沟通成本提升


3.白银时代 (BFF时代)


随着微服务的盛行,后端数据接口被拆分独,假设现在前端需要一些数据,可能都依赖几个微服务,需要作数据聚合。而与此同时,作为离用户最近的前端,面对各种移动设备,每个客户端的数据类型要求不同,诸如移动端所需数据并不多,需要做数据拆解。


会产生类似下面的battle场景👇:


微信截图_20220514231952.png


前端同学和后端同学都各有各的道理,有没有一种解决方案可以化解这种尴尬的场景,

于是就有了BFF,BFF全称是Backends For Frontends(服务于前端的后端)


微信截图_20220514232000.png


在BFF层下面是各种后端微服务,在BFF上层则是各种前端应用(多端应用),向下调用后端为服务,向上给客户端提供接口服务,后端为BFF层的前端提供的的 RPC 接口, BFF 层则直接调用服务端 RPC 接口拿到数据,按需加工数据,来完成整个BFF的闭环(以Node+GraphQL技术栈为主)


BFF的出现确实解决了蛮多前端后的沟通成本,彼此也友善了很多,对话就演变成这样


  • 后端:这些微服务都在这里了,你看着组合,有问题找我
  • 前端:行,我看着组合


对于BFF感兴趣的童鞋可以阅读树酱之前的 你学BFF和Serverless了吗?



相关文章
|
定位技术 索引
基于Amos路径分析的输出结果参数详解
基于Amos路径分析的输出结果参数详解
1892 2
|
10月前
|
存储 人工智能 Serverless
《AI 剧本生成与动画创作》解决方案测评
这篇评测介绍了2025年首个AI剧本生成与动画创作解决方案。该方案结合阿里云的函数计算、对象存储OSS和百炼大模型服务,通过API调用实现剧本生成、语音合成及字幕生成等功能,适用于教育、短视频、游戏娱乐等领域。评测详细描述了部署流程,包括开通相关服务、准备物料、应用体验等环节,并对视频生成过程中的用户体验进行了总结和优化建议。整体而言,方案操作简便,但视频生成耗时较长且存在一些功能限制,如缺少进度条、多任务支持不足等。希望开发者们积极参与分享真实体验,共同推动技术进步。
621 4
|
9月前
|
人工智能 自然语言处理 前端开发
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
本文介绍如何使用Spring Boot3与Vue2快速构建基于DeepSeek的AI对话系统。系统具备实时流式交互、Markdown内容渲染、前端安全防护等功能,采用响应式架构提升性能。后端以Spring Boot为核心,结合WebFlux和Lombok开发;前端使用Vue2配合WebSocket实现双向通信,并通过DOMPurify保障安全性。项目支持中文语义优化,API延迟低,成本可控,适合个人及企业应用。跟随教程,轻松开启AI应用开发之旅!
|
存储 Linux
如何查看Linux设备的硬盘信息?
【4月更文挑战第12天】在Linux系统中,查看硬盘信息的常用命令。
502 4
|
机器学习/深度学习 人工智能 自然语言处理
什么是NLP(自然语言处理)?
自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。
1489 1
|
小程序
微信小程序扫描二维码如何跳转小程序内指定页面并传递参数给目标页面?
微信小程序扫描二维码如何跳转小程序内指定页面并传递参数给目标页面?
微信小程序扫描二维码如何跳转小程序内指定页面并传递参数给目标页面?
|
存储 缓存 Shell
BackTrader 中文文档(二)(3)
BackTrader 中文文档(二)
471 0
|
缓存 监控 算法
API网关:开源Apinto网关快速入门
Apinto网关基于GO语言模块化开发,5分钟极速部署,配置简单、易于维护,支持集群与动态扩容,开箱即用。
689 0
API网关:开源Apinto网关快速入门
|
云安全 安全 Linux
网站服务器怎么做防御?遇到攻击如何解决?
如今黑客攻击越来越多也十分猖獗,我们应如何防护呢?
502 0
|
分布式计算 资源调度 安全
CentOS7下Hadoop3.2.1的安装与部署(单机模式)
CentOS7下Hadoop3.2.1的安装与部署(单机模式)
621 0