如何看待后端接口带出数据库全部字段

2022-04-13 16:10:43 +08:00
 mokevip

直接从数据库中取得模型,不需要的值就是一堆 null

如果是需要额外处理的字段,就在原本对象内放一个 params 的对象,再嵌套一层放处理的数据

能因为一个值需要转换一下数据而扯皮,哪怕是取模于 10 这种简易操作也要前端来做

11157 次点击
所在节点    程序员
128 条回复
golangLover
2022-04-13 17:07:01 +08:00
垃圾后端呗,还有什么原因
DinnyXu
2022-04-13 17:10:57 +08:00
后端返回这种有很多 null 值的字段是因为后端在查询的时候调用的是一个通用方法,这个通用方法对应的就是表结构的字段,也就是 domain 。如果你需要只返回一些有数据的字段,后端需要将 domain 转换为 VO ,或者是直接写 SQL 查询映射 VO 。这种返回很多 null 纯粹是涂方便,也不算是懒,只能算不规范.....
mokevip
2022-04-13 17:14:38 +08:00
@xujinhui1 小公司,我算是前端的管理,还是不能完全摸鱼不管的。。
mokevip
2022-04-13 17:15:59 +08:00
@iamqiwei 卧槽,一样!
pelloz
2022-04-13 17:16:26 +08:00
这种情况一般出现在后端不知道前端需要什么字段,只知道前端需要这个业务内的字段。总的来说就是没人设计 api ,靠猜进行开发。
mokevip
2022-04-13 17:16:44 +08:00
@spicecch 那后端炸了哈哈
westoy
2022-04-13 17:27:18 +08:00
不涉及安全(比如泄漏密码啊, 或者返回跨权限的字段)问题其实没什么毛病, 对 CDN 和后端缓存都挺友好的
rabbbit
2022-04-13 17:28:28 +08:00
别纠结这个,如果领导没说就别管,出事了也跟你没关系。
对前端没影响,而且以后缺了啥字段也好取。
到时候得罪了后端,布尔值全给你返回来 1 0 。
R18
2022-04-13 17:32:45 +08:00
@yedanten
想请教一下,数据库列名不也是语义化的吗。难不成返回前端的时候要另改一个名字。
zzc032003
2022-04-13 17:45:26 +08:00
@putaozhenhaochi
为什么必须要转化啊? 如果仅仅是把字段名改名,意义何在哪?
Bingchunmoli
2022-04-13 17:47:45 +08:00
第一如果接口不是面向业务开发而是面向数据开发,针对数据做返回是没问题的,如果针对业务就考虑前端处理和后端处理的优缺点,前端处理是大部分情况吧因为无所谓安全,只是展示,但是后端性能有点影响,前段在用户侧用前端可以节省一些后段性能
Bingchunmoli
2022-04-13 17:48:52 +08:00
@iamqiwei ruoyi 是生成,如果你需要业务处理也可以写啊,面向数据的借口又不知道你业务需要忽略
Bingchunmoli
2022-04-13 17:49:22 +08:00
@clf 但是有的接口需要呢
Bingchunmoli
2022-04-13 17:50:29 +08:00
@xgfan 小公司这样很普遍,因为你做 vo 又不增加工资,卖出去就不管了,写代码时间多学习准备跳槽挺好的
akira
2022-04-13 17:52:23 +08:00
你这是生怕别人不好脱裤么。。这下好了,直接 api 就能获取到数据了,渗透都不用了
lecher
2022-04-13 17:55:25 +08:00
缺一个 BFF 框架,展示数据不能受限于后端开发人员的约束。
https://maguangguang.xyz/backend-for-frontend
https://maguangguang.xyz/bff-governance

看看之前 v 站用户的分享
gogogo1203
2022-04-13 17:57:40 +08:00
golang 的解决方案是 应用层 和 数据层 的 user 写成两个 struct, 进出应用层用 user, 数据层出来要强制转化格式 。
刚开始挺麻烦的, 做习惯了就好了

```
package user
type User struct {
ID string `json:"id,omitempty"`
Username string `json:"username"`
Email string `json:"email"`
Roles []string `json:"roles,omitempty"`
PasswordHash []byte `json:"-"`
}

package db
type User struct {
ID string `db:"user_id"`
Username string `db:"username"`
Email string `db:"email"`
Roles pq.StringArray `db:"roles"`
PasswordHash []byte `db:"password_hash"`
....
}

```
TUNGH
2022-04-13 17:57:52 +08:00
作为后端开发,给前端的每一个接口几乎都重写了 VO,你们后端这样写,不但懒,而且蠢.
jhdxr
2022-04-13 18:00:31 +08:00
如果本身接口就是简单的 CRUD ,为啥我觉得除了潜在的安全风险(敏感字段,例如密码之类的。但这也只要配置一个黑名单)以外这么做没啥问题?除了浪费了一点流量。上面还有人提字段名泄露啥的,改个名掩耳盗铃吗?又是真有一个注入点,想要拖数据的还需要在乎你有没有泄露字段?现在都是自动化工具了。
446ENzu91KZ73A33
2022-04-13 18:00:59 +08:00
@akira api 本来不就是获取数据的吗?这个应该要怎么改?

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

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

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

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

© 2021 V2EX