关于前后端分离的理解。

2016-05-25 10:25:12 +08:00
 hujianxin

大家好,我是一个刚入门的后端程序员(算是吧)。使用 django 开发了两个简单的网站,最近实验室有一个小任务,我想借着这个机会了解一下前后端分离的技术,要不然就真的太落伍了。

关于前后端分离,我一直没有一个清楚的概念,自己心里有一些想法,但是非常不自信。

所以,我在下面说一下自己的理解,希望有经验的大哥帮忙指教一下。

第一类,通过 nodejs 作为一个中转站, nodejs 虽然运行在服务器上,但是它处理的是前端显示的业务,例如路由,所以它是前端的一部分,后端使用其他的语言来处理数据问题,然后与 nodejs 通信。 第二类,通过前端框架来实现显示逻辑,例如路由,读取 api 等,这些任务都是浏览器来完成的。然后后端用其他任何语言来提供前端所需要的 api 。

上面是我自己的理解,望指正。

14064 次点击
所在节点    程序员
64 条回复
changwei
2016-05-25 10:42:31 +08:00
我理解的前端就是负责所有和用户交互有关的模块都可以视为前端,他就像餐馆里面的前台服务生直接和客户打交道的人。
后端就是负责处理用户的请求,进行数据的处理,用户几乎所有操作都可以抽象为对数据的增删改查,就像餐馆里面的厨师接收服务生告诉他要炒哪些菜,厨师把菜处理好再给服务生(后端处理数据返回给前端表现层)服务生最后输出给客户。

但是目前由于很多情况下业务比较简单,比如说一个内容发布系统 CMS ,用户交互,请求查看文章和管理员新增文章都是很简单的业务逻辑,所以前后端都用 php 这门主要用于表现层的语言来实现,而本身在用 MVC 模式把用户交互部分( V 和 C )以及数据处理(主要是 M ),否则的话就得用 java 等非脚本语言来实现保证效率,甚至高并发环境下还要用到消息队列,缓存等等。

个人理解,有误请指出。
chairuosen
2016-05-25 10:46:12 +08:00
后端只给 http 接口,前端只调接口渲染一下页面,互相只有接口的依赖
CtrlSpace
2016-05-25 10:54:16 +08:00
最近也想了解一下这些,前后端之间只剩下 HTTP ?
hxtheone
2016-05-25 11:10:57 +08:00
现在的前后端分离, 后端服务器的角色更像是一个 API Server, 接收请求并且只是以数据的形式返回, 而怎么渲染和表现数据, 都交给更前端的表现层来做, 实现前后端的解耦
aksoft
2016-05-25 11:13:59 +08:00
分久必合合久必分
BOYPT
2016-05-25 11:14:52 +08:00
node 为什么要跑前端显示的业务……莫名其妙…… node 本来就是后端服务器,只不过恰好跟浏览器跑的是同一个语言,跟浏览器压根没有关系
Ouyangan
2016-05-25 11:16:16 +08:00
固定 json 就 ok.
hujianxin
2016-05-25 11:18:19 +08:00
@BOYPT 我跟几个学长问的时候,他们这样解答,说 node 可以作为后端数据处理方面的应用,但是大多数人并不这么做,而更多的使用它来处理显示业务,例如路由,例如模板生成。当然,如果你的 api 使用 node 写的话,它就是后端。否则,前端的定义界限不应该是浏览器,而是与前端显示有关的都是前端部分。
hujianxin
2016-05-25 11:18:46 +08:00
@BOYPT 第一条回复就是这个意思。
hujianxin
2016-05-25 11:21:15 +08:00
@changwei 那前端框架是什么角色呢?例如如果优乐 reactjs ,前端部分还需要 php 或者 node 这样的东西吗?它能直接通过浏览器解释来读取后端 api 吗?
hujianxin
2016-05-25 11:23:42 +08:00
@hxtheone 你好,你这里指的前端需要使用 node 吗?只使用前端框架可以实现吗?
BOYPT
2016-05-25 11:28:27 +08:00
@hujianxin 这么说来, express.js 属于“前端框架”, laravel 属于“前端框架”……

你的界定有道理,不过我觉得别人会不想和你说话了。
fds
2016-05-25 11:29:13 +08:00
@hujianxin 是的,浏览器上运行的 js 代码可以直接用 http 或其他协议访问后端的接口。
hujianxin
2016-05-25 11:30:57 +08:00
@fds 好的,谢谢,你这样说我就明白了。
RoshanWu
2016-05-25 11:34:00 +08:00
前后端分别独立布署是分离的必要前提
gimp
2016-05-25 11:59:20 +08:00
连接彼此的只有接口,提供接口的为后端,使用接口的为前端。 Node 的作用就是让 Javascript 也能在服务器上跑了,让这门前端语言也能处理一些后端工作,仅此而已。把 Node 归到前端很让人不能接受

你在 8L 回复“路由”, “模板生成”,然而这并不是 Node 的什么新兴概念,返回给用户的页面无非是后端渲染完成直接返回 HTML ,或者后端返回一堆数据,然后浏览器选进行渲染

最开始的时候大多数 web 框架都是这样做的,后来人们觉得后端渲染比较浪费服务器资源,何不利用用户的浏览器呢,这样服务器的开销会降低很多,于是把渲染的工作交给了前端,后来逐渐发现这样做会在一定程度上影响用户体验,并且对 SEO 也不好,所以又有不少人开始重新拾起后端渲染。就像 react ,刚出来还是普遍前端渲染的,几个月后后端渲染的呼声越来越高。已然最佳事件

然而回到最开始我想说的,前后端分离的标准我认为就是根据接口划分的。为什么需要前后端分离,我觉得有这些好处, 1 ,方便重构,只要接口保持一致,前后端想怎么玩就怎么玩。 2 ,适合快速开发,接口定下后,前后端可以独立进行开发,最后对接即可。 3 ,方便找到问题,先看接口,二分法,出现问题直接定位是前端问题还是后端问题(方便甩锅)

最后,无论 Node 在后端做了什么他都属于后端,更何况“路由”,“模板渲染”这些已经是所有后端 web 开发框架标配的东西...
hujianxin
2016-05-25 12:07:28 +08:00
@gimp 多谢耐心的解答,我对你上面说的有一点不能理解,还想继续请教一下。

你在上面说,前后端分离适合快速开发,接口定了下来之后,前后端就可以独立进行开发了。我这样理解对吗,在这里,后端就是只提供 api ,前端使用 api ,这里的前端只是浏览器的工作了,无论是使用纯 js 还是 react ,都与服务器没有关系了?
gimp
2016-05-25 12:13:16 +08:00
@hujianxin 是的,前端无论使用什么技术,只要能请求接口获得数据即可,前后端分离就是用接口来交换数据的。
如果使用模板,这就打破分离了,因为写模板是前端的工作。而且模板也是要放在后端。
gimp
2016-05-25 12:16:34 +08:00
对了,我也不知道模板应该是谁写... 是前端写最终页面,后端开发人员切割成模板还是前端工作者直接就提供给后端模板...
morethansean
2016-05-25 12:21:04 +08:00
主要还是怎么定义“前端”吧。
我觉得有些人把“前端”太局限了,认为 nodejs 不管怎样都算是“后端”,我不赞同仅仅因为我们对“前端”的理解不同。引擎的人把我们 web 服务端+传统的浏览器前端都叫前端,这也是从他们的视角出发。
从这几年我自己的工作内容来看,我所做的 web 前端也好, nodejs 端也好,我觉得都还属于前端的范畴。因为即便我们写的 nodejs ,也只是跑跑自己业务的任务啦,调调各种各样公司更后台的各种接口,包括但不仅限于各种数据库储存系统、其他线提供的服务等等啦。因为这一切都还是在为展示层服务,包括对更后台接口的合并、缓存等等。
而所谓前后端分离,我这里更经常说数据展示分离。早年说的前后端就是传统意义上的客户端+服务器端,但我觉得随着时代的发展、公司的发展,前后端的定义也在慢慢的变化,而且在不同的场合可以有不同的定义。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX