问一下后端的同学为何你们传参都喜欢 int 1234

2020-05-15 11:29:37 +08:00
 en20

比如接口要传一个请求来源,后端让我传的参是 1 拼多多, 2 淘宝, 3 京东 。。。

为什么不能直接给一个字符串 '淘宝',反正都是要 switch case ,这样也很直观.接手别人的项目里一堆 1234 我都不知道传的是什么,也不写个 map,我很难受

17942 次点击
所在节点    程序员
138 条回复
murmur
2020-05-15 11:31:38 +08:00
c 和老 java 年代留下来的习惯,手动定义一堆常量,没让你传 1248 就很给面子了

你要知道一些老的标准 switch case 不支持 string 的
hhyvs111
2020-05-15 11:32:25 +08:00
中文字符串也太 low 了吧,传个拼音或者缩写可以理解
Lin0936
2020-05-15 11:33:30 +08:00
可能是 enum
gamexg
2020-05-15 11:34:19 +08:00
如 1 楼,老习惯,定义常量然后使用。

如果真的不希望使用数字,那么推荐字母。非常不推荐中文,中文有时会出现编码问题。
en20
2020-05-15 11:35:25 +08:00
后端是 php,问了一下同事说传字符串他们领导会骂他
KyonLi
2020-05-15 11:35:46 +08:00
还可以传 emoji
Wincer
2020-05-15 11:37:21 +08:00
要是前端这么问我,我就会说这是为了安全起见,隐藏真实的数据来源和含义 🐶
hbolive
2020-05-15 11:38:25 +08:00
传 int 可能还有数据库设计上的考虑,enum/int 这些,在统计上效率明显高于 string
hallDrawnel
2020-05-15 11:40:25 +08:00
电商名字感觉拼音缩写比较 ok,后期不够了还可以用全名。数字也不是不行,但是必须约定一个固定映射,不能随便改动。后端甚至可以给前端出一段代码获取这些映射名字,很简单的。(我就是后端我是愿意的,估计他们不愿意)
Dogergo
2020-05-15 11:41:05 +08:00
赞同楼上,是为了数据库设计更优,存字符的话会有很多不便。我们代码里一般会有对应的数据字典[1=>'淘宝'],这样淘宝将来改名字了,我们只用修改代码,而不是更新掉数据。
catror
2020-05-15 11:42:20 +08:00
偷懒而已,省一道转换
ipwx
2020-05-15 11:42:52 +08:00
@Dogergo 都只是个代号,电商改名字你并不需要改常量啊。。。这么大的电商,就算改个名字,叫老名字十年内大家都还记得的吧。
Mutoo
2020-05-15 11:42:54 +08:00
跟后端要一份常量字典文档,problem solved ✅️
fancy111
2020-05-15 11:44:25 +08:00
不是喜欢用,是方便而已。
你什么都可以传啊,因为 get/post 也是可以都传的。中文有时候会遇到编码问题,而且不建议带特殊字符,所以综合来说数字和字母最好。
Chingim
2020-05-15 11:46:40 +08:00
@Dogergo 接口字段没必要和数据字段等同呀,毕竟接口是给人看的。看日志的时候一堆 1234 不是效率较低吗

也可以再起一个表来存 1234 和 taobao/jd 的关系嘛
miniwade514
2020-05-15 11:46:46 +08:00
用数字枚举的好处,需要增加新值的时候,只要无脑 +1 。坏处,传到前端就没有语义了,依赖文档。如果随着业务迭代需要经常新增,文档更新还不及时,就很烦了。
qwerthhusn
2020-05-15 11:47:20 +08:00
说一下 java 和 MySQL
jdk7 之前是不支持 switch 字符串的
但是可以用 enum

enum 的话,数据库就有问题了,映射成字符串的话,查询时字符串查询肯定比数字要慢(不要说索引,这种就几个值的分布全表,建了索引也没用),mysql 也支持 enum,但是如果要新增删除项,就不像 java 那么简单了
chairuosen
2020-05-15 11:49:00 +08:00
并不是偷懒,淘宝要是改名成马云宝呢?你要手动刷一遍库么?
namelosw
2020-05-15 11:51:34 +08:00
前后端都写的感觉还是字符串好。

不过 1 2 3 4 都是小儿科,我还见过跟 Linux 权限一样那种 0 1 2 4 加到 7 那种用来表示列表……
yousabuk
2020-05-15 11:53:05 +08:00
传数字好兼容,好扩展,好修改,因为数字本身不代表任何含义。跨语言就更麻烦了,会制造无谓的 BUG 。

1,传中文:字符编码兼容问题,1 个中文占 2 个字节;
2,传拼音或者英文:也势必比 int 型占用的字节多,;
3,堆栈的区别( Java );
4,利于内存管理:如果是 0~7 就完全够用,那么后端可以定义数据类型为:u8, byte, char 等,节省内存。如果是嵌入式设备就有必要。
5,某些语言不支持字符串 Switch ;

弊端太多了。

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

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

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

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

© 2021 V2EX