记一次针对app目录结构接口的重构

记录一次对现有app目录结构接口的重构,合理的重构让我们的代码更加优美和简洁,也让我们的项目更加容易维护。

题图:from Google

引子

在web开发中,针对app的后端接口设计是有别于传统网页接口设计的。之所以存在这种差异,主要有以下几点原因:

  1. 数据量
    按需返回,app需要哪些数据就返回哪些数据。如果返回多余的数据,很明显会浪费流量,但是更重要的会影响传输效率与响应时间。
  2. 接口数量
    app更希望一个页面对应一个接口,而传统网页则要求不高,此处主要是考虑到http传输效率。众所周知http包会包括多个数据头,真正需要的数据可能还不及数据头大,因此接口减少,有利于提高传输效率。
  3. 接口版本控制
    随着app不断迭代发版,app使用的新旧接口变化,后端需要面对如何应对管理的问题。(一种方法:使用参数中带版本信息,请求通过filter时进行解析然后分发)

背景

后端:RESTful接口
app:包括ios、android
接口数据结构:Json

当前app首页以及目录结构接口返回结构:

兼职端app:先锋

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"success": true,
"msg": [
{
"aIcon": "http://xxx.png", //安卓 icon
"iIcon": "http://xxx.png", //ios icon
"id": 801, //图标id
"title": "任务分配" //图标title
},
{
"aIcon": "http://xxx.png",
"iIcon": "http://xxx.png",
"id": 802,
"title": "分餐点"
}
]
}

重构原因

  1. 缺少部分数据
    很简单,在返回结构中加上所需数据就好。
  2. 实现后端控制跳转
    • app中点击菜单或者图标会跳转到对应的目录或者页面,目前app采用的方式是在代码中写死路径。
    • 现在考虑在返回结构中加上url,这样每个菜单或图标根据此url进行跳转
    • 此举可以降低app代码的耦合度,并且,若有修改跳转url的需要,只需后端修改即可,无需重新发版
  3. 实现后端访问统计
    对于现在web服务来说,经常会有统计访问量、统计访问来源等信息的需求。
    • 前端统计
      主要使用不同厂商提供的统计服务,例如百度、友盟、flurry、google analytics
    • 后端统计
      通过后台代码进行统计,合理入库并提供展示。使用后端统计意味着需要:
      • 前端在每次请求时都要携带特定参数用于统计,因此应该合理设计参数以减小对于传输效率的影响。
      • 后端需要在每次接到请求时将对应统计参数进行解析处理

淘宝后端统计,前端参数方案(spm)

重构结果

  1. 通过将跳转控制剥离到后端,降低app代码设计的耦合性
  2. 加入访问统计,日后可以分析用户行为
  3. 将接口结构与请求参数规范化,易于维护

重构后接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"success": true,
"msg": [
{
"aIcon": "http://xxx.png", //安卓 icon
"iIcon": "http://xxx.png", //ios icon
"id": 801, //图标id
"title": "任务分配" //图标title
"badge": 1, //小红点之类的标记
"url": "http://www.baidu.com" //跳转url
"isHome": 1 //是否首页显示
},
{
"aIcon": "http://xxx.png", //安卓 icon
"iIcon": "http://xxx.png", //ios icon
"id": 801, //图标id
"title": "任务分配" //图标title
"badge": 1, //小红点之类的标记
"url": "redScarf://www.baidu.com" //跳转url(自定义协议用于app内部跳转)
"isHome": 1 //是否首页显示
}
]
}