关于前后端分离接口和展示层的一些问题

2019-07-02 11:41:09 +08:00
 lihongjie0209
  1. 排序问题

假如接口返回的数据是 3 1 2, 但是前端需要展示的是 1 2 3, 并且没有分页, 一共就 3 条数据, 那么这个排序是前端做还是后端做.

  1. 数据整理问题

假如接口返回的是一个数组, 但是前端需要一个树, 那么这个数据整理是前端做还是后端做.

我的想法是后端和展示层不依赖, 数据整理和排序都应该是展示层的工作.

实际情况是前端做起来很费力, 只能我专门写一个整理好的接口.

再次说明了: 技术问题最终还是人的问题.

11751 次点击
所在节点    程序员
131 条回复
zongwan
2019-07-03 08:00:54 +08:00
1. 后端数据结构 解耦前端组件
2. 可缓存数据 由后端做
3. 每个用户都不一样的数据 由前端做
4. 传递的数据尽量平铺,不要有太深的层级
pastgift
2019-07-03 08:04:21 +08:00
我觉得前后端各自都有展示层,并不冲突。
后端的展示层就是返回数据格式,同样一套数据可以输出 HTML、JSON、XML,包括结构细节都可以不同。
前端的展示层就直接是 UI 了,同样一套数据可以显示成表格、图表等等。

具体实现上要看业务,
如果你的一个后端接口对应前端的一个页面,那谁做都一样,或者说这根本无所谓前后端分不分离。
如果你的一个后端接口可以提供给前端各个模块使用,作为后端是有必要提供一些基本的输出选项的(比如数据格式、排序),当然前提是后端系统本身得自洽有意义

说到底还是一个职责划分的问题,出现这样的情况严格来说并不是前端或者后端的问题,是系统设计有问题,接口定义、指责和边界没有经验或者根本没想过。
sutra
2019-07-03 08:11:37 +08:00
前后端你一个人包揽了,就没这个问题了。
zhang77555
2019-07-03 08:59:04 +08:00
后端只提供数据,前端觉得数据不好用自己加中台转换,现在前端还有不会 node 的?
后端应该集中精力在接口的并发能力,架构的可扩展性,如何应对后面的业务升级,而不是和前端撕你这个接口是应该给我个数组还是一个树.
mara1
2019-07-03 09:10:05 +08:00
开发前双方碰一下,约定格式,给个 demo,照着开发,中间有小的修改,比如顺序问题,让前端自己写个函数转一下,2 分钟的事情。
比较大的改动,那就要双方再碰一下,最好拉着老大,研究一下为啥改,老大说改,那就改,加时间嘛。
l00t
2019-07-03 09:13:40 +08:00
不分页的排序跟后端有个屁关系。自己排序不是前端最基本的工作之一吗?给 10 个字段,要求点击字段名就按该字段排序,这种需求再常见不过了吧,难道都传给后端重新调一次?
LeeSeoung
2019-07-03 09:19:37 +08:00
前后端都搞一遍就能互相体谅了。。排序问题 在数据量大的情况下 前端处理是非常影响性能的,而且这种操作有时在后端就是一个 order by 的事情。还有如果前端用了 UI 框架,那么数据格式一般都是有要求的,这个时候需要前端主动把数据格式先整理给后端,方便后端按照格式返回。
good1uck
2019-07-03 09:42:34 +08:00
sql 后加个 orderby 方便还是前端多层级数据排序方便?
amumu666
2019-07-03 09:56:31 +08:00
后端只管写 SQL 取数么?那前端传 SQL,前端处理数据格式不就得了么?后端不需要了,你说的灵活可以实现,非常灵活。
我现在做的项目就是这样一个畸形的接口模式。因为设计他的人前后都写,在这种前后端谁做都可以的情况下,他混淆了前后端的责任。
你说的两个问题都是后端的问题,只取数完全不涉及业务么?那确实后端不需要了,前端取数就可以了。
再次说明了: 技术问题最终还是人的问题.
meszyouh
2019-07-03 10:03:35 +08:00
问题:前端技术不咋地
ktonline
2019-07-03 10:12:29 +08:00
说这么多都是扯淡,你自己去分别后端实现一下 前端实现一下就行了呗
TommyLemon
2019-07-03 10:14:54 +08:00


APIJSON 就是用来解决前后端关于接口各种联调和扯皮等问题的。
排序?前端传 "@order": "id+", "@order": "date-" ... 想怎么排就怎么排,后端不用写代码自动支持。
分组?前端传 "@group":"userId", "@group":"momentId" ... 想用哪个字段就就用哪个字段,后端不用写代码自动支持。
分页?前端传 "count":10, "page":1 想怎么分就怎么分,后端不用写代码自动支持,还能 "query":2 同时查数据和总数。

MySQL, PostgreSQL, Oracle 等各种数据库常用功能全都「自动化」 支持,不用后端写代码:
```sql
"key[]":{} // 查询数组

"key{}":[1,2,3] // 匹配选项范围,WHERE key IN(1,2,3)

"key{}":"<=10;length(key)>1..." // 匹配条件范围,WHERE key<=10 OR length(key)>1 OR ...

"key()":"function(arg0,arg1...)" // 远程调用函数,fun.invoke("function", value0, value1...)

"key@":"key0/key1.../targetKey" // 引用赋值,ON Table1.key = Table2.targetKey

"key$":"%abc%" // 模糊搜索,WHERE key LIKE '%abc%'

"key~":"^[0-9]+$" // 正则匹配,WHERE key BINARY REGEXP '^[0-9]+$'

"key%":"2018-01-01,2018-10-01" // 连续范围,WHERE key BETWEEN '2018-01-01' AND '2018-10-01'

"key+":[1] // 增加 /扩展,SET key = json_array_append(key, '$', '1')

"key-":888.88 // 减少 /去除,SET key = key - 888.88

"name:alias" // 新建别名,SELECT name AS alias

"@column":"id,sex,name" // 返回字段,SELECT id,sex,name

"@group":"userId" // 分组方式,GROUP BY userId

"@having":"max(id)>=100" // 聚合函数,HAVING max(id)>=100

"@order":"date-,name+" // 排序方式,ORDER BY date DESC, name ASC

"@schema":"sys" // 集合空间,SELECT sys.Table

"@database":"POSTGRESQL" // 跨数据库

"@role":"LOGIN" // 访问角色
```
TommyLemon
2019-07-03 10:15:01 +08:00
rain0002009
2019-07-03 10:30:14 +08:00
当只有前端用这接口的时候会扯皮 当 app 也要用这接口的时候 哈哈哈 cto 一定叫服务端改

产品:这个页面的这个数据 改成 按时间倒序吧
app 大佬:这个我直接从接口拿的,叫服务端改吧
前端菜鸟:对呀,对呀
服务端大佬:这个接口都没分页的,叫他们自己改改吧

app 大佬:噢,行吧
产品:要多久啊
app 大佬:改改一分钟,审核一星期,下周见
产品:... ...
前端菜鸟:我改好了
cto:叫服务端改吧,以后这种服务端能改的 都服务端改吧
服务端大佬:好吧
前端菜鸟:哦,我改回去
此时 app 大佬 打开了保温杯 喝了一口茶
l00t
2019-07-03 10:30:45 +08:00
@TommyLemon #112 终于出现了!
TommyLemon
2019-07-03 10:33:29 +08:00
@MotherShip
@akari33
@dongisking
@LongMaoz
@passerbytiny
@stx2012
@cwjokaka
@lneoi
@cyndihuifei
@liuhuansir
@serge001
@xuanbg
@version
@15651980765
@will0404
@raynor2011
@Sapp
@TimPeake
@deleteDB
@freakxx
@l00t
@drlalll
@passerbytiny
@hyy1995
@tingfang
@dongxiao
@zsy979
@a86356
@zhang77555
@good1uck
@amumu666

后端不用写代码,自动支持前端定制 排序方式和 JSON 结构,一次获取任何结构、任何数据。
提供 Java,C#,PHP,Node,Python 等后端实现。大家和和气气地工作、早点下班回去陪家人和休息娱乐。
见 # 112 楼回答
https://yangjunhui.monster/t/579241?p=2#r_7568676
mozhizhu
2019-07-03 10:33:45 +08:00
可能不是研讨该前端做,还是后端做的;
尽量把数据结构变更留着服务器端;
既然都是前后分离了,中间可以考虑用一个 node 处理输出数据;
后端依然只管自己的数据输出,中间产生差异化数据,利用中间件调整。
至于中间件谁来维护,谁打赢了,谁决定。。。。/手动狗头
TommyLemon
2019-07-03 10:36:06 +08:00
@l00t 久等了,话说这不是钓鱼贴吧?/笑哭
liuhuansir
2019-07-03 11:00:21 +08:00
@TommyLemon 你这种推广方式真心让人反感,大家本来讨论好好的,你上来就贴一大串,你真要推广就自己开贴去
jorneyr
2019-07-03 11:49:22 +08:00
假如接口返回的是一个数组, 但是前端需要一个树, 那么这个数据整理是前端做还是后端做.

这种要求我觉得前后端做都简单,如果有多个前端,如 Android、iOS、Web、微信小程序等,最好还是后端做吧,免得每个前端都做一遍重复工作。

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

https://yangjunhui.monster/t/579241

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

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

© 2021 V2EX