同一个接口,两种写法

做数据同步时,对方给的配置一会儿是对象,一会儿是数组。我按对象写了取值,第二天字段变成列表,全报错。

不是谁写错了,是没人商量过该用哪种,接口文档里也没写。

三条判断标准

三条不复杂,难的是每次都问一遍,而不是凭记忆。

身份:每个元素有没有稳定的唯一标识,比如 id、域名、端口,有就可以当键。

顺序:元素的先后有没有业务含义,比如步骤、时间线,有就必须用数组。

查找:调用方主要按 key 取一个,还是遍历全部,这决定了数据结构的形状。

三条里有两条指向同一边,就按那一边定。拿不准的时候,把两份真实数据贴进宝塔拨测的开发者工具集格式化对比,差异看得见。

宝塔拨测工具盒:站长工具与 IT 工具入口

宝塔拨测工具盒:站长工具与 IT 工具入口

该用数组的情况

顺序和重复,是它最强的两个理由,其次是遍历方便。

有顺序,比如操作步骤、日志条目、排行榜,顺序本身就是信息。

允许重复,同一个值可能出现两次,用对象会互相覆盖。

主要用途是遍历,很少按某个键直接取,数组最顺手。

该用对象的情况

按名字取值,是它最舒服的场景,代码也更好读。

每个键唯一,天然适合当索引,比如按域名、按端口,取值一次到位。

只需要按名字取值,不需要顺序,也不用考虑重复。

增删频繁,按 key 操作比遍历更快,数据量一大差距就明显了。

反着用会怎样

这三种后果,都要花时间补,而且往往在最忙的时候暴露。

数组当字典:每次取值都要遍历,数据一多就慢,还容易写错下标。

对象当列表:顺序不保证,前端渲染出来顺序乱跳,用户以为数据错了。

字段含义靠位置猜:加一个字段,所有依赖位置的代码全废,改一次崩一片。

折中与验证

没有完美答案时,选改动最小的那个,也最好解释的那个。

既要身份又要顺序,可以用数组,元素内部带 id,两边都不耽误。

定下来就写进接口文档,写清为什么这么选,别让下一个人再猜一次。

结构定对了,后面改起来才轻松。

结构定错,后面全是补丁。

补丁多了,就成技术债了。

技术债这东西,早晚要还。

早点还,利息少。

这个道理,做接口的人都懂。

懂归懂,做到的不多。

做到的那几个,都挺省心。

省心这件事,值得追求。

追求省心,本身就省心。

这话听着绕,其实很实在。

实在的话,往往不好听。

听进去就好。

听进去,就能少踩几次。

少踩坑,就是进步。

进步一次,就顺一次。

顺了,就不折腾了。