V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chengs
V2EX  ›  问与答

前端后端的分割应该是靠代码运行的位置(客户端、服务器)划分还是靠业务逻辑(随界面变动的就是前端逻辑)划分

  •  
  •   chengs · 2020-12-28 17:41:09 +08:00 · 2006 次点击
    这是一个创建于 1418 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如,url 路由表是前端还是后端,是靠位置定义的前后端还是靠业务定义的前后端。
    那么这个路由表是前端程序员去随时跟着产品更改,还是后端程序员去维护。(这里面还暗含一个问题就是实际上说是后端程序员但是你在写前端相关的代码,比如服务器渲染模板)。

    不要抠字眼,我想我表达的主要矛盾大家应该看的出来。
    37 条回复    2020-12-29 11:02:56 +08:00
    OldActorsSmile
        1
    OldActorsSmile  
       2020-12-28 18:02:02 +08:00
    我是一个独立开发者,前后端都自己开发,但是我前后端也是分离的,前端纯 html,通过 ajax 调用自己后端的 api 。
    前端 webpack,后端 nodejs
    jifengg
        2
    jifengg  
       2020-12-28 18:05:01 +08:00
    我个人的话,习惯以“代码运行在什么位置”来判定。当然,服务端渲染的话,渲染的那部分应该算前端,比如写模板,而从数据库里拿出数据去给模板渲染的,算后端。应该没有明确的定义吧。看看楼下怎么说。
    chengs
        3
    chengs  
    OP
       2020-12-28 18:06:12 +08:00
    @OldActorsSmile 路由算前端还是后端
    Sapp
        4
    Sapp  
       2020-12-28 18:06:58 +08:00
    前后端分离的状态下,后端只负责接口,其他全部给前端就行了
    chengs
        5
    chengs  
    OP
       2020-12-28 18:08:51 +08:00
    @jifengg 你接近问题了,是页面 call 函数取得数据来填模板还是后端带变量 call 模板程序生成页面。正确应该是哪个。
    chengs
        6
    chengs  
    OP
       2020-12-28 18:10:15 +08:00
    @Sapp 你说的接口在现实实践里不过是一个没有渲染的页面而已,产品更改要显示的数据,你的接口给出的内容都要跟着改。你想太浅了。问题没有回答,路由是前端管还是后端管。
    OldActorsSmile
        7
    OldActorsSmile  
       2020-12-28 18:13:21 +08:00
    @chengs

    api 的域名跟前端不一样,没有路由的概念。后端写技术文档给前端,让前端能够正常调用即可。
    我知道你可能会问跨域,这个技术上没问题
    EPr2hh6LADQWqRVH
        8
    EPr2hh6LADQWqRVH  
       2020-12-28 18:15:42 +08:00
    写面向终端用户的代码,操纵 UI 展示,影响终端用户体验,定义为前端;
    写系统内部逻辑的代码,操纵数据库和其他内部组件,影响组织内部运行成本,定义为后端;
    chengs
        9
    chengs  
    OP
       2020-12-28 18:18:00 +08:00
    @avastms 路由是前端还是后端。谁管
    egglin
        10
    egglin  
       2020-12-28 18:20:45 +08:00
    中台和后台吧,中台算后台的后端,后台算中台的前端?
    chengs
        11
    chengs  
    OP
       2020-12-28 18:22:35 +08:00
    @OldActorsSmile node.js 里面的 /index,/profile 是谁要求添加,是谁去写路由,是谁负责具体页面的渲染,是谁负责填写模板的数据。按你说的方案,api 是给出的是一条 record 还是 api 只提供一个域的数据,一条 record 是前端在浏览器拼接多个接口数据。
    chengs
        12
    chengs  
    OP
       2020-12-28 18:23:18 +08:00
    @egglin 。。。
    luob
        13
    luob  
       2020-12-28 18:25:15 +08:00 via iPhone
    我好像听明白怎么回事了,要不要 @一下那个男人(逃……
    renmu123
        14
    renmu123  
       2020-12-28 18:25:28 +08:00 via Android
    在前后端分离的情况下,写浏览器端代码的就是前端,写服务器端代码的就是后端。至于你把业务代码放浏览器端还是服务器端都可以,只是浏览器有着天生安全问题,大部分人会选择放在服务端。至于你说的路由表问题,路由表不会出现致命性安全问题,浏览器端愿意写就扔给他们了。如果你还要讨论为分离情况的话,那你就自己思考一下。前端和后端不是能严格给出定义的东西,会随着时代发展而发展
    chengs
        15
    chengs  
    OP
       2020-12-28 18:43:49 +08:00
    @renmu123 一个产品决定根据运营数据对产品进行改造,需要将原来的 2 级路由改成 3 级,只是用户操作产品的路经和显示改变,功能没有改变(暗指后端逻辑不变)。过了一周,新的运营数据出来了,产品决定再度调整路径和界面(后端逻辑不变)。现在你觉得路由表应该谁写,是随便丢个人写吗?
    chengs
        16
    chengs  
    OP
       2020-12-28 18:44:02 +08:00
    @luob 需要
    Cbdy
        17
    Cbdy  
       2020-12-28 19:08:48 +08:00 via Android
    前后端分离的情况下,路由归前端管
    前后端不分离的情况下,都不分离,哪有什么前端后端
    chengs
        18
    chengs  
    OP
       2020-12-28 19:16:33 +08:00 via iPhone
    @Cbdy 说的好,路由归前端管。那么前端自己去改 java 代码还是 python 代码。这个路由应该是运行在什么运行时。
    EPr2hh6LADQWqRVH
        19
    EPr2hh6LADQWqRVH  
       2020-12-28 19:20:13 +08:00
    啧。。。。

    前后端分一下工,前端自己管自己的路由好了,后端 nginx 类似的东西统一返回前端的程序,浏览器里面再去解开前端路由。

    后端管自己的 API 路由,用户访问的都是前端路由,这样就分开了,各管各的分开发布
    raaaaaar
        20
    raaaaaar  
       2020-12-28 19:23:42 +08:00 via Android
    一个调接口,一个写接口呀
    chengs
        21
    chengs  
    OP
       2020-12-28 19:24:44 +08:00 via iPhone
    @avastms 听着像 php,问题现在的 nginx 只做虚拟服务器,真的路由在 mvc mvvc 框架里,而且除了 spa,这个 c 都是在后端语言运行时运行。
    chengs
        22
    chengs  
    OP
       2020-12-28 19:25:44 +08:00 via iPhone
    @raaaaaar 这一串下来应该有铺垫了不少内容了。你是觉得大家都是傻子吗?
    Cbdy
        23
    Cbdy  
       2020-12-28 19:26:25 +08:00 via Android
    @chengs 如果是前后端分离(通常为 spa ),前端为什么要改 java/python 代码?后端只对前端提供 api,前端用 ajax 调就可以了。至于路由,当然是在浏览器完成,可以用基于 location.hash 的路由或者基于 history api 的路由
    chengs
        24
    chengs  
    OP
       2020-12-28 19:33:47 +08:00 via iPhone
    @Cbdy 我明白你的意思。spa 是职责明确很多(但是仍然有页面专用接口的存在,页面显示内容变动,接口需要跟着改动。如果严格,那么应该是后端写 sdk,前端 rpc 调用这个逻辑)。现在我的问题是一般化这个问题。就如标题写的那部分,在服务器里运行的页面相关的逻辑应该是谁负责。通俗点服务端渲染是谁去做。
    Cbdy
        25
    Cbdy  
       2020-12-28 19:39:31 +08:00 via Android
    @chengs
    我认为是都可以做,不过最好由前端做,后端把结构化的配置(通常为 json )下发一下,然后前端根据这个配置动态 render 出对应的页面片段
    当然,也可以服务端直接返回一个 html 片段,前端直接拿来用,但不太符合前端的分离的初衷和前后端接口交互的一致性
    chengs
        26
    chengs  
    OP
       2020-12-28 19:43:26 +08:00 via iPhone
    @Cbdy 下发的那个页面 url 是谁管,运行时是什么语言
    Cbdy
        27
    Cbdy  
       2020-12-28 19:45:44 +08:00 via Android
    @chengs 后端只是增加了一个下发配置或页面片段的 api,和前端路由没有关系
    避免用 url 这种模糊不清的词语,说后端 api 或者前端页面路由
    eason1874
        28
    eason1874  
       2020-12-28 20:12:02 +08:00
    我的理解,后端就负责功能实现,给前端功能交互提供支持。

    前端说我需要一个用户信息 API,后端就整个信息 API,改版了说需要一个权限 API,后端就整个权限 API 。

    前端 URL 路由怎么设计就是前端的事,后端 API 是按功能提供 API,不是按页面。
    opengps
        29
    opengps  
       2020-12-28 20:52:06 +08:00 via Android
    以运行环境来区分,运行在服务器上的逻辑,属于服务端,运行在浏览器的逻辑代码,属于前端
    oott123
        30
    oott123  
       2020-12-28 22:58:13 +08:00
    服务端渲染当然是前端做,你指望只会写后端的人帮你调渲染么,不存在的。

    当然大厂的话可能会分到更加细分的工种做。
    chengs
        31
    chengs  
    OP
       2020-12-28 23:35:30 +08:00 via iPhone
    @oott123 不是整个页面。header footer 那种。你后端调优或者写数据交集之类的事情的时候,页面改动了,你只好停下来给他们改一改让他们看看效果。
    oott123
        32
    oott123  
       2020-12-29 00:17:38 +08:00 via Android
    现代前端,几乎是整个页面和前端路由都归前端管——前后端分离+服务端渲染( SSR )

    你说的那种混在一起的写法是过去的故事了,你们都在一个仓库干活,就别分什么前后端了,其实都是一个岗位
    chengs
        33
    chengs  
    OP
       2020-12-29 07:13:30 +08:00 via iPhone
    @oott123 你说的是 nodejs koa 这种。前端人员什么心态,这里面有个 server 啊
    Sapp
        34
    Sapp  
       2020-12-29 10:26:23 +08:00
    @chengs 我觉得你根本就没搞懂现在的前端,我感觉你不像是没开发经验,但是问出的问题确实很离谱,感觉偏离这个时代有点远。我说的只负责接口一点毛病都没有,后端只负责接口你说路由给谁管?产品要改显示的数据你要改你的内容和前端又有什么关系?你改了前端拉接口不是自然就是新数据?尤其是你说的路由给前端导致前端要去改 java 代码,这还叫前后端分离吗 我觉得你还是需要去看一下。还有下发页面 url 这个问题,这不前端直接打包之后运维起 NGINX 管吗,这肯定不会让后端去分发路由,当然就算你后端想管,那也是给全部链接都转到前端去。就算就算要搞服务端渲染,那也是前端用 node 搞,跟你后端还是没有关系,后端依旧是只提供接口
    Sapp
        35
    Sapp  
       2020-12-29 10:26:54 +08:00
    @chengs 你为什么就非要觉得要有个 server 要插在前后端中间呢? 这点我就很不明白
    chengs
        36
    chengs  
    OP
       2020-12-29 10:37:52 +08:00
    @Sapp
    chengs 15 小时 6 分钟前 via iPhone
    #avastms 听着像 php,问题现在的 nginx 只做虚拟服务器,真的路由在 mvc mvvc 框架里,而且除了 spa,这个 c 都是在后端语言运行时运行。
    raaaaaar
        37
    raaaaaar  
       2020-12-29 11:02:56 +08:00
    不知道你怎么想的,一个把数据隐藏起来写成接口,一个调接口用,所谓的前后端就是这么个分工咯,不然呢?本来就不是一个严格的定义。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.