翻代码的时候,无意中看到有小伙伴为前端定义接口的时候,使用JSON的姿势不太正确。
方便起见,把问题简化一下:java要向前端传送一个List,List中的每个对象有两个字段:标的物名称和标的价格。
这个有问题的数据接口是这样定义的:
{
"objectList": [
{
"P-12-20191219-001": "5000"
},
{
"P-12-20191219-002": "10000"
},
{
"P-24-20191219-001": "50000"
}
]
}
他直接将标的物名称(objectName)当做key,把标的物价格(objectPrice)当做value传给了前端。
下面说一下这样做的问题。
1、接口丧失了可扩展性
如果我们按照正常的做法,将接口设计成这样的话:
{
"objectList": [
{
"objectName": "P-12-20191219-001",
"objectPrice": "5000"
},
{
"objectName": "P-12-20191219-002",
"objectPrice": "10000"
},
{
"objectName": "P-24-20191219-001",
"objectPrice": "50000"
}
]
}
以后如果需要追加字段,可以随时随意加。只要原来的两个字段不做变动,那App不管旧版新版都可以正常使用,完全不受影响。
但是定义成 “objectName”:“objectPrice” 的话,怎么扩展,怎么兼容?
新旧版本两个接口同时维护,直到旧版被强更掉吗?除了给自己徒增麻烦以外没有任何好处。
2、可读性极差(不具备自说明性)
长期做这个项目的同事,看到前面的“P-期限-日期-编号”,一般都能马上反应出来这是啥。
但是后面的5000、10000、50000都尼玛是个啥?不看文档打死也不敢随便猜(话说,如果有文档的话……)。