列表 api 不返回 id 给前端可以吗?

2023-07-11 23:40:25 +08:00
 witcat

数据表里 id (单库,自增数字)和 name(长度 10 个以内的英文字符串)是唯一的。
后端不返回 id ,接口都让前端用 name 字符串获取数据,
不是为了防采集。就是觉得很少见到用可读的字符串作为查询的条件,想问一下这样做会有什么问题吗?

4010 次点击
所在节点    程序员
56 条回复
webfamer
2023-07-11 23:43:11 +08:00
id 唯一,名字会重复
witcat
2023-07-11 23:43:35 +08:00
@webfamer 不重复的可以吗
pengtdyd
2023-07-11 23:46:51 +08:00
可以
zhengjian
2023-07-11 23:55:50 +08:00
可以,另外可以试试 https://hashids.org/ 把 id 加密一下
witcat
2023-07-11 23:58:52 +08:00
@zhengjian 如果完全不返回任何 id 给前端 还有必要加密吗
mineralsalt
2023-07-12 00:04:20 +08:00
不可以, 一般默认 name 是变动的, 是一种不确定的值, id 是不变的, 用 id 查更可靠, 其次 id 查询速度现对于字符串的 name 更快, 要养成良好的编程习惯, 一般前后端传值都是用 id, 又没特殊需求, 就遵循默认不好么, 干嘛特立独行, 当然业务需求非用 name 当然也没问题
b1t
2023-07-12 00:19:42 +08:00
能用,但这种方式不可取,反驳的槽点很多
witcat
2023-07-12 00:22:06 +08:00
@mineralsalt 谢谢,我想延伸再问一下,假设 name 大多数时候创建了就不会变,但如果变了,会有什么后果吗?
我目前能想到的就是用户用浏览器把这个页面收藏了,后面再访问数据就不见了。
因为我也好奇,微博、推特这些网站也是用 用户自定义的 id 定位一个用户,但都不能修改。还有什么其他原因吗?
witcat
2023-07-12 00:23:09 +08:00
@b1t 有时间就告诉我几个槽点吧,单纯就是想长长知识。
shakukansp
2023-07-12 00:29:12 +08:00
前端框架比如 vue react 渲染表格都需要给每一个表格项绑定一个唯一的 key ,用来复用元素或者检测变更

你不给前端就要自己弄一套自增的 id 来标记,为啥不直接给呢?
witcat
2023-07-12 00:33:06 +08:00
@shakukansp name 可以作为 key 啊
tangtj
2023-07-12 00:41:04 +08:00
两个用户 a 和 b name 在短时间内 name 都改变了, b 用户改成 a 用户之前的用户名 . b 是否会查到 a 的数据
witcat
2023-07-12 00:42:49 +08:00
@tangtj 对哦 是防止被冒充的风险
shakukansp
2023-07-12 00:42:49 +08:00
@witcat 看了下,name 不重复的话可以
witcat
2023-07-12 00:43:21 +08:00
@shakukansp #14 🤝
moonrailgun
2023-07-12 00:51:50 +08:00
第一,id 可以作为后续操作的唯一标识,比如你要点击到某一条记录肯定不能是第几条或者某个 name
第二,id 可以作为前端缓存的唯一标识,当然如果不做缓存当我没说
第三,如果这个列表是动态更新的,id 可以优化前端渲染性能(在 mvvm 框架)
第四,代码洁癖,一条记录一定要有一个唯一 key ,不然纯粹靠数组会不放心,当然这个洁癖可以没有
chendy
2023-07-12 08:24:27 +08:00
有 id 就老老实实用 id ,id 用到系统下线公司关门都不会重复
name 今天不重复说不定以后会重复,或者日后有其他业务规则上来需要 name + 其他某些字段才能确定是哪一条数据就要坐牢了
Dragonphy
2023-07-12 08:43:44 +08:00
name 可能会有需求变动要求可更改,不如用一个 nanoid 字段,但这和 id 其实没啥区别
darkengine
2023-07-12 08:53:01 +08:00
把自增 id 暴露出来其实有一定风险的,例如可以通过 id 的值判断你们业务大概到了什么量级。
MEIerer
2023-07-12 09:02:52 +08:00
......

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

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

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

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

© 2021 V2EX