skyADMIN

对前后端分离的思考

作为学校易班技术部的leader,大三这一学年里最后的贡献就是完成了初步的前后端分离的规划和框架搭建。

为什么要做前后端分离呢?这个故事可以从很早以前开始讲。

一开始说要给易班做轻应用的时候是懵逼的。什么叫轻应用,琢磨了一下发现,好像其实就是个网页嘛。OK,静态网页的制作还是很简单的,做了一些诸如大物实验数据辅助处理系统,就是拿js算一些加减乘除,生活查询,就是根据客户端时间判断水房是否开门等等。

静态做了该做带后端服务的真正的轻应用了,因为是给易班做,目标是吸引用户到易班上,这些轻应用我基本没有考虑过自己做用户表,就是用户信息都是直接从易班开放平台获取。这个地方涉及到Oauth2.0协议拿数据,易班开放平台做的这一个呢有一些让我觉得不舒服的限制,比如回调地址和应用地址必须是同一个,精确到完整的url,还有必须是点对点调用,就是不能回调到多个位置。

之后就是开始写,选的是springboot框架,这是一个Java的框架,特点是开发速度特别快,让人觉得,这还是Java web框架么?它为很多东西提供缺省配置,省去编写复杂的xml文件的时间。部署上也极其方便,因为内嵌一个tomcat,最后build出来的是一个jar包。在一台安装了jdk的电脑上输入java -jar xxxx.jar即可运行,不需要考虑tomcat的配置。

拿springboot写了3、4个应用吧。比如抽奖、查询、签到等,都是这个框架,配上模板引擎thymeleaf做的。看上去好像没什么问题,为什么还是不满意呢。

首先,前端上我希望向工程化、组件化、模块化看齐(并没有做到QAQ),所以要求前端工程要使用yeoman来做,也就是前端其实是单独的工程,做好了页面以后把需要后端提供信息的部分扣掉用{{变量}}这样替代,最后build出来是压缩过的。

这就导致了,前端修改起来挺麻烦的,如果是两个人分别做前后端,必须在一起工作,频繁交流,才可以。这对学生开发团队太难了,都有课的人。

除了前后端必须联调导致修改不便之外,还有一旦部署,再想修改很难这个问题。因为用户信息没有存自己的表,必须走易班授权,上线的产品修改地址要审核,要本地测试得把回调地址指回本地,改好后又要指回去,又要审核一次。我怎么给用户解释应用不见了这个问题……?卒……

还有一个问题是,我前面说为什么选springboot框架时说过,是因为这个框架简单,开发简单,上手简单,部署简单。部署简单是有代价的!

没在服务器上配置tomcat,打包又是jar包,相当于每个应用,都是独立的,跑在独立的tomcat容器里,运行3个应用就等于开了三个tomcat,5个应用就是5个tomcat,tomcat本来就比较重,再这么开下去,服务器很快就受不了啦。

前后端分离后,把所有的应用都写在一起,整合应用,只用一个tomcat装。前端请求不同的接口获得数据。还有把一些config信息从代码里转移到了yml文件里。因为生产环境和开发环境的配置文件不同,再也不用像以前那样手工反复修改代码了。

谈谈具体怎么做的。

就是springboot的controller可以用@RestController注解来声明,方便快捷变成一个RESTful微服务后端,遇到的问题就是跨域,用CORS解决了,掉cookie/session,通过查资料修改配置CORS解决掉了。暂时没别的问题了。

思路就是我们服务器上还有nginx服务器,前端项目之间部署进nginx服务器,参考后端文档拿数据,展示。前端可以自由选择框架,angular1/2,react,vue,ember等等,反正接口在那,自己拿数据。

现在发现还有一个问题,开发还是不够方便,为什么这么说呢,需要前端把后端工程也download下来运行在本地,不然没法开发。这个问题我也想好了如何解决了,在服务器上运行两套东西,一套开发版,一套正式版。唔,今天搞下这个。

码字很辛苦,转载请注明来自环宇博客《对前后端分离的思考》

评论