
入职一个多月,还在试用期,这周被调到一个新的项目组,说是以后就负责这里的前端了。小组就 1 前端+1 后端+1 产品(负责人,也做后端),要做一个统计 项目。
谈到 API 的时候产品告诉我,他们的 API 会返回下面这种格式,我也需要用这种格式返给后端
{ 'A00001': '...', 'A00002': '...', 'B00001': '...', 'C00001': '...', // ... } ABC 表示数据层级什么的(这个没听明白,好像在数据库里的表字段也是这样命名的),编号随着字段增加会一直递增,会给我一张 Excel 表让我去查对应的编码的解释。
问这么做的原因,说是出于什么加密的打算,说反正前端都是要查表填字段的,变量取什么名字又没差。我:?????
当时我就表示无法接受,气氛一度很尴尬,最后也不了了之了。感觉后面再谈这个事情会闹得不愉快。
这让前端怎么搞?我这一年多经验见识少,有没有老哥能跟我讲讲其中的奥义?
其实还有不少坑,比如原型是一份到处截图下来的像剪贴画的 Excel 表格,月底还要上线第一版,感觉是个巨坑。当时面试的时候并不知道要我来做这个,我都没打算做一个人的项目。
公司 100 人左右,不算太小,感觉算技术型公司,但是要看项目组。做 Web 的前端岗位就我跟面试我的小哥(水平不错)两人,这一个多月是在一起做项目的,配合的很不错,前端这块并不是公司的重点。
现在考虑的是,如果是个坑就得跑,但是因为我是 7 月底离职后在家待了 2 个多月,10 月份才开始找工作并入职的,这样简历上是不是没法看了? 1 年多的前端很多 HR 都直接筛掉了,根本没有面试机会。
坐标厦门,15 毕业,省内 211,工科专业非计算机,毕业后做 2 年 C#开发后转前端做到现在,这是我第一次跳槽,待遇就不要提了,都是泪。
1 crs0910 2018-12-04 01:07:36 +08:00 via iPhone 直接显示这些编码,有人问你就说。这是为了加密。 |
2 AllOfMe 2018-12-04 01:12:34 +08:00 其实我觉得只要数据格式明确就没有什么问题吧,这个可能和程序员的代码洁癖有关,我有时候也忍受不了一些数据格式的别扭,但是身为一个程序员,应该专业的不带感情的去对待 |
3 0ZXYDDu796nVCFxq 2018-12-04 01:22:52 +08:00 via Android RSA 了解一下 有些重要数据可以用 RSA 加密然后传回去 |
4 df4VW 2018-12-04 01:29:42 +08:00 刚入职一个月还在试用就这么刚吗 |
5 Mitt 2018-12-04 01:33:05 +08:00 via iPhone 这种属于加密给自己看的,纯粹没事找事型 |
6 zhangyu911013 2018-12-04 01:33:13 +08:00 via Android 感觉就是个工作量是前端还是后端做,有的后端传的比较原始,需要前端自己解析处理,有的后端都给你拍好了直接可以用。努力沟通下吧,争取确定一个双方都比较方便的格式。。这些都是小事 |
7 scnace 2018-12-04 01:45:43 +08:00 via Android “密码学不要自己造轮子” (还有这算哪门子的加密? |
8 Lonely 2018-12-04 01:48:08 +08:00 via iPhone 想走就走,估计你也不想沟通 |
9 sagaxu 2018-12-04 02:00:52 +08:00 via Android 国企很多这种字段混淆项目,我见过一张表几百个字段,都是这种名字 |
10 doommm OP 没有任何拒绝沟通的意思,发帖的目的也是为了理解这样的做法。 以我有限的经验看,如果一个前端项目里面如果充满这些字段名,后续维护迭代成本我是不敢想的,查表就要查半天,没有开发效率可言。 |
11 kx5d62Jn1J9MjoXP 2018-12-04 07:09:11 +08:00 via Android 见过垃圾的后端,你碰到的这种已经属于奇葩行列,这种不入流的开发经验积累起来对你也没什么好处 |
12 Trim21 2018-12-04 07:19:11 +08:00 via Android 嗯,这 excel 要是泄露了很就得重新改一遍数据库结构才安全? |
13 yamedie 2018-12-04 07:25:21 +08:00 via Android 魔法数字? |
14 yuikns 2018-12-04 07:30:16 +08:00 等等。你们这个是怎么 mapping 呢?难道是 hard code ? 要我倒是无所谓,我大概把它当作 i18n 来做,直接拿个包 https://github.com/i18next/react-i18next 就搞定 当然平时我是不写前端的,除非偶尔写个 demo |
15 xuanbg 2018-12-04 07:46:12 +08:00 赶紧找下家。。。 |
16 AntiGameZ 2018-12-04 07:57:24 +08:00 之前我有这么做过,不过会另外维护一个 mapping,真实有意义的名字和 A/B/C 这些无意义名字的对照。最终发到前端的 JSON 是根据映射文件生成的。 |
17 doommm OP @AntiGameZ 他们根本没打算做 mapping,给我的感觉是要么不懂现在的前端开发,要么就是想省事,加密只是说辞 |
18 NaiveSimpleYoung 2018-12-04 08:28:58 +08:00 via Android 前端如果维护一个 mapping,“加密”不就失效了如果不维护…对接口不跟吃苍蝇一样吗 |
19 不像是加密,应该是工作量问题。 |
20 yemoluo 2018-12-04 08:30:40 +08:00 又见厦门,你好 |
21 az422 2018-12-04 08:37:55 +08:00 via Android 只是字段编码了,值不变? 比如 A00001:10086,这一眼就看出 A00001 是手机号了,没事找事啊 |
22 nullcc 2018-12-04 08:41:59 +08:00 后端可以给领导吹牛逼鸭,说我们采用加密技术,当然领导不会去了解细节的(手动狗头。哈哈看了 LZ 厦门观音山的,搞不好就在隔壁 |
23 Leigg 2018-12-04 08:45:35 +08:00 via iPhone 不加密数据,反而加密字段? |
24 buf1024 2018-12-04 08:48:44 +08:00 这样定义数据层级很正常: 比如: A 表示数码产品大类,00001 表示手机,00002 表示小家电等等,B 代表服装大类等等 |
25 Bryan0Z 2018-12-04 08:52:08 +08:00 via Android 我没懂,这咋了 |
26 lengxiao 2018-12-04 08:53:17 +08:00 同厦门 +1 |
28 k9982874 2018-12-04 09:00:18 +08:00 现在的前端真难伺候 |
29 VeryZero 2018-12-04 09:06:09 +08:00 之前做 ZF 外包项目遇到过类似的,甲方给的数据字段都是这样的,数据库里存的也是这样的。一度以为他们脑子秀逗了。过了好长时间一次偶然的机会发现,貌似 ZF 里有一个标准,规定了字段对应的编号。。 |
30 zaqzaq0125 2018-12-04 09:07:53 +08:00 我司对接事业单位的数据库都是这种字段名。(字母+数字) |
32 allen9527 2018-12-04 09:12:13 +08:00 有些项目甲方会有这些规范,反正挺坑的,字段都是编码或者缩写,根本不知道是啥意思。 你前端自己维护一个 mapping 啊,估计没人看。 按这个字段以后维护起来会吐血。 |
33 VoidChen 2018-12-04 09:13:11 +08:00 不知道你们什么行业,我做公安行业和交通行业确实需要这么处理,前后台都弄个字典转义。年轻人见识少还是心存敬畏的好 |
34 Guozi1989 2018-12-04 09:13:49 +08:00 我还见过 {"备注 1":"买了否冷"} 的。 |
35 si 2018-12-04 09:13:50 +08:00 我昨天刚搞个了 A0~A100 全部字符串的的表,没办法,爱怎么样就怎么样吧,我也懒得改变别人的想法。 |
36 rocksolid 2018-12-04 09:14:37 +08:00 这是在为难 python |
37 annielong 2018-12-04 09:20:13 +08:00 少见多怪吧,很多都有这种要求的,F001,F002 等等,隐藏数据库字段, |
38 lsongiu 2018-12-04 09:21:30 +08:00 这是什么格式,单引号什么鬼,自己写解析方式吗,又不是 json |
39 Norie 2018-12-04 09:21:54 +08:00 via Android 难道不是甲方说了算? |
40 jrient 2018-12-04 09:23:07 +08:00 自己做个自动解码的功能,有障碍才有进步。 |
42 ifoto 2018-12-04 09:23:30 +08:00 为同在鹭岛的你的感慨一下。厦门这种坑逼还是很多的 |
44 strive 2018-12-04 09:26:38 +08:00 遇到过设计成字段 1 字段 2 字段 3 字段 4,当时就一脸懵逼 |
46 ilaipi 2018-12-04 09:28:57 +08:00 我是后端出身的,一样看不惯这样的后端。前端代码现在如果上线要保密啥的至少要 ugly 一下吧。。。靠这样的编码变量名,真是画(xian)蛇(de)添(dan)足(teng)。不知道后端是用的什么语言,现在大部分语言应该都可以前端数据直接 mapping 到 model 了吧,这样编码一下,这个 mapping 不得加一层了?真是 F*** |
47 shyangs 2018-12-04 09:41:19 +08:00 ZF 标准 |
48 Sapp 2018-12-04 09:54:45 +08:00 如果是为了保密什么的,你们后端是个傻逼无疑,这保密个锤子? 如果仅仅是格式不符合前端调用,那简直太正常了,后端一贯的德行,自己撸着舒服就行,甚至有后端从库里取出来什么就给你什么(一串字符串转都不愿意转...),碰上一个好的后端简直太艰难,我现在都是自己转 |
49 xiaozizayang 2018-12-04 10:02:40 +08:00 各个公司由于历史原因各种规定 估计你组长也不知道为什么是这个样子哈哈 btw 我也在厦门 哈哈 |
50 guoyuchuan 2018-12-04 10:06:48 +08:00 表示看不懂 |
51 notreami 2018-12-04 10:19:51 +08:00 拿着白面的钱系列,数据 key 真的重要嘛??系统架构设计、中间件、持续交付、监控容灾抗压等等才是关键吧。 这种格式,说白了,就是之前种种原因( zf 要求、大佬一游等)设计成这样了。 然后让你改,你能怎么改呢?全盘推到重做?针对自己这块做 key 映射,然后引入一些新 key 让大家学习? 在不放弃的原则下,那肯定是忽略这块,然后看看业务流程、技术栈、维护的服务系统设计、整体系统架构等等有木有坑,这些坑感觉太大,就可以名正言顺的下一家了。 |
52 stzz 2018-12-04 10:25:52 +08:00 你如果看不惯就跑吧,要不你来重构数据结构? |
54 reself 2018-12-04 10:31:16 +08:00 via Android @doommm 加密个铲铲,估计他自己都不懂这么做的缘由,只是照搬别人的规范而已。 这么做完全是为了维护性,代价是需要建额外的字段映射表。如果表很少,这么做确实有点多余。但是如果表很多,字段上万,这么做非常有必要。 |
55 duan602728596 2018-12-04 10:35:08 +08:00 via iPhone 有毛线用,扒过一堆接口的人表示,字段这东西猜都能猜出来 |
56 learnshare 2018-12-04 10:35:27 +08:00 这种加密方式的好处是自己人看起来麻烦 |
58 snw 2018-12-04 10:44:26 +08:00 ZF 标准只看到过取值有固定编码,没见过字段名用固定编码的。印象中 ZF 项目字段名不都是拼音首字母缩写吗? http://www.gov.cn/gongbao/content/2017/content_5165785.htm |
59 visonme 2018-12-04 10:45:14 +08:00 见没见过还真不重要 API 约定,不说不同的公司,有自己的一套甚至于几套规范,就是同家公司不同组都存在很大的差异。 重要的是,这些约定是明确,有效,可执行的~ |
60 snw 2018-12-04 10:46:15 +08:00 你把那张 excel 表做个映射表,然后自己管自己用语义化的变量名,和后端通讯时 map 一下就行 |
61 chmlai 2018-12-04 10:48:45 +08:00 就算是 ZF 的标准也是个弱智标准 |
62 zhaogaz 2018-12-04 10:51:49 +08:00 哦,我好想是理解了, 我之前外包公司的开发规范里面有个类似的事情.不过我们当时是后段代码,bussiness object 简称 bo,一般命名是 xxxBo, 规范中要求 xxx 是 字母简称+数字也就是 AAA001 类似这种, 但是后来我们也没有照着做,我们就是按照类名命名来写. 建议你问问理由,然后尝试按照他们思路理解下.这个事相比其他的都小毛病,无所谓. (反正我觉得就是麻烦自己而已...) |
63 lrh3321 2018-12-04 10:53:01 +08:00 via Android 好傻 |
65 reself 2018-12-04 11:01:30 +08:00 @doommm 你的问题是学的太少抱怨太多。上万个字段的场景,而且有频繁的字段增减、字段值编码的变化,这时候单词命名是根本不够用的,你思考一下就知道这时候就得用数据库表来驱动,将字段名、字段值都放表里,人是读不懂编码的,所以还得写个映射方法去映射。 |
66 doommm OP @reself 查表法我知道的。我理一下,目前他给我的 excel 表里面只有编码对应的中文解释,意味着我自己要先对每一个变量在前端命名,然后用查表法去转。感觉是个工作量问题? |
67 reself 2018-12-04 11:05:52 +08:00 又如,如果你们弄了个通用系统,要在各个项目里用到,但不同项目对相同数据的描述却不一样,编码也不同,本质上确是同一个东西,难道你要为每个子系统重新设计一套命名,然后去批量改代码里的命名?用表驱动的话就根本不需要做这种工作,直接更新表就行了。 |
68 reself 2018-12-04 11:13:40 +08:00 @doommm 所以还是看字段量,如果字段少,这部分工作量的比重就会比较大。如果字段量很多,相对于维护这些字段,维护查表的成本要小很多。比如维护单个字段的成本系数是 10,字段查表的成本系数是 5,那成本就是 10k 与 5k+C ( k 是字段数量的某种指标,C 是维护查表方法的成本,不随字段数量增长)。那么 k 小于 2 时直接维护字段划算。k 大于 2 时建立映射表划算。 抱歉之前可能比较暴躁,主要是对你的描述里透露出的“因为抵触,认定它一定是不合理的,不愿去了解和学习”不满 |
69 cs371332219 2018-12-04 11:14:16 +08:00 这种属于不懂装懂,自欺欺人,赶紧招下家吧。权衡下自己呆在这能积累多少有用的东西。 |
71 reself 2018-12-04 11:17:09 +08:00 当然,如果后端只给数据,不负责字段表,那就是坑,赶紧跑路吧~ |
72 woshipanghu 2018-12-04 11:18:28 +08:00 统计的内容设计很多专业的词汇,用对应的英文长而且你也看不懂,还不如短一点的变量 才一年的工作经验 还是不要这么跳的好 |
73 dd0754 2018-12-04 11:23:12 +08:00 via iPhone 接过一个这样的外包,搞的我想屎 |
74 ddup 2018-12-04 11:25:23 +08:00 via Android 字段混淆,这很正常。 碰到这种需求,要是觉得麻烦,可以自己先弄一个 mapping,代码里面写可读性强的字段名,改一下编译器自动把这段替换回去就行了,这样既方便维护,又保证了编译后的代码变量名被混淆。 mapping 只在编译的时候需要。 |
75 ddup 2018-12-04 11:26:34 +08:00 via Android 纠正一下,改一下编译过程,不是改编译器。现在前端不都有构建器吗? |
76 atcdef 2018-12-04 11:28:00 +08:00 这种我倒是见过,一般来说,给钱的人说了算,毕竟这个给出了明确的说明文档,无可非议哈 |
77 Linxing 2018-12-04 11:31:33 +08:00 哈哈哈哈哈 看得我醉醉的 |
78 hellobanny 2018-12-04 11:34:44 +08:00 如果一行代码都没写过,这个还可以商量下。如果后端都实现了,那就这样定了,反正只要文档明确,都一样。写前段数据处理只是一小部分工作,大部分都不是花在这个上面,写个小模块翻译下就好了。为这么点小事就跑路,那估计哪儿都呆不久。 |
79 petelin 2018-12-04 11:36:26 +08:00 会给我一张 Excel 表让我去查对应的编码的解释。这就很坑了, 起码是一个可编程的格式, 否则就是态度问题(json 什么的).... 前端怎么查表也要 hardcode 带代码里. 楼上居然还有人支持,说什么为了加密....弱智吧 |
80 shuperjolly 2018-12-04 11:43:56 +08:00 via iPhone 楼上好多人都只能说太年轻啊 |
81 xi2008wang 2018-12-04 11:49:39 +08:00 @petelin 不需要 hardcode 吧,写一个替换函数,js build 阶段时替换一下 其实这也不是什么加密,就是混淆,加大破解难度 |
82 buf1024 2018-12-04 11:53:17 +08:00 @doommm 表示数据层级可能只是一方面,另外,如果所有的 key 都是这样,那么是不是后台对这种 key 有特殊的考虑?比如考虑到以后的扩展,比如分库,数据迁移等,A 开头的,数据迁移的 A 机器,B 开头的数据迁移到 B 数据,这样对以后的数据扩展和分库都比较方便。 |
83 xuhaoyangx 2018-12-04 11:54:30 +08:00 说个我知道的...各种宝们和证券交易系统 用的中间件,访问接口也是这样的,数字一串,里面的字段到是比较正常的 |
85 reself 2018-12-04 11:58:04 +08:00 via Android @doommm 可以沟通下一下,只给 Excel 确实坑,这个应该做成后端返回的。至于是首页一次全量返回还是分页按需返回则需要协定。 |
87 wdv2ly 2018-12-04 12:02:38 +08:00 “如果一个前端项目里面如果充满这些字段名,后续维护迭代成本我是不敢想的”, 多大点事,自己加个跟服务器对接的转换层隔离下不就行了吗 |
88 Chingim 2018-12-04 12:07:52 +08:00 无非就是 mapping 谁来做的问题罢了. 这种场景我都是说服后端, 让他们做, 理由: 1. 接口字段应该语义化, 一来方便开发, 需要传什么值一目了然. 二来方便测试, 测试人员抓包的时候如果能一眼看出数据含义, 效率会很高. 不仅仅字段名称语义化, 连字段值也要尽量语言化, 能传 ISO 格式的时间, 就不要传时间戳 2. 如果有多个端(ios/android/其他 web)在消费这个接口, 那么每个端都得做自己做一遍映射, 代码冗余 |
89 doommm OP @reself 就昨天沟通的结果,字段往多了说还不足 100 个,详细文档还没有给到我。您说的后端给的字段表目前不存在,产品的意思是让我直接往代码里填这些编码。 自己来做 mapping 的工作算是一个方案,我会想想如果要做的话,怎么做的好一些。 有一个新问题是,前后端协商接口的时候,为了不给今后工作挖坑,前端这边需要守住的底线在哪里? |
90 l00t 2018-12-04 12:23:20 +08:00 这是业务需求,你这样理解就行了。傻不傻另当别论,有些看起来很蠢的东西是因为天时地利人和各种原因导致的妥协,有些则是真的蠢。你到这公司才一个多月,还没到可以判断对方业务需求是否合理的时候。 坑不坑什么的,不是这种地方能看出来的。这点鸡毛蒜皮的小事就下定论的话,这世界上怕是也没几个公司不坑了。 |
91 xuecan 2018-12-04 12:37:21 +08:00 同厦门呢 难得 哪家公司啊 |
92 leexy 2018-12-04 12:53:52 +08:00 你明天不要来上班了 |
9 keepfun 2018-12-04 13:46:40 +08:00 我觉得如果是出于安全考虑,这个无可厚非.比如一些字段名字,定义的见其名就知其意,并不好. |
94 JCZ2MkKb5S8ZX9pq 2018-12-04 13:48:06 +08:00 既然有 excel 了,自己 mapping 一下就好了呗。 先适应公司,再看看有没有改善的可能。 |
95 AntiGameZ 2018-12-04 15:28:14 +08:00 @NaiveSimpleYoung mapping 在后端做。mapping 管理有单独的 UI。有意义的文字是给人看的,无意义的字符在 API 层面上用。反正写代码的时候也不会看到这些东西。前端那边在开发阶段使用一样的 mapping,发布的时候 build script 会把这些 mapping 的值做替换。 |
96 chenyu8674 2018-12-04 16:25:34 +08:00 sourcecode:var phOnenumber=jsonObj.getValue("A00231"); 加密,卒 |
97 fxxkgw 2018-12-04 17:08:36 +08:00 以前写 C 的吧 |
98 TingHaiJamiE 2018-12-04 17:49:55 +08:00 偶然见过一次我们某厂家的代码,里面也是这样写的,理由和楼主说的一样,为了保密 |
99 sammo 2018-12-04 22:01:46 +08:00 编程 是不是典型的 “一个东西有很多种实现的办法” 在某种限制条件之下,才会过滤得出一种办法 而人们又无法对 “某种限制条件” 达成共识 感觉就是 这根本就没法整 感觉就是 很容易造成权威崇拜,最后发现 权威也不权威 生命如此懵懂 ( 珍爱生命、远离编程 ) |
100 519718366 2019-01-04 11:10:14 +08:00 我一个做过社保项目的同学当时也跟我吐槽过,就是你这种设字段设计,貌似是 zf 的尿性?♂ |