问题:
- 如何在yii中具体实现api多版本
- 如何避免代码冗余,方便维护
- 除了接口代码的版本管理,还要考虑接口文档的版本管理
- 至多保留维护多少版本需要限定,避免维护过多版本
实现方式:
1 . 每个版本copy一份代码作为一个模块
- 优点:实现简单粗暴
- 缺点:维护成本太大、代码冗余严重
2 . 使用spl的autoload,根据传递来的版本号,查找接口对应的action在存在的版本目录由近及远,找到并加载。
- 优点:实现接口增量更新,减少维护工作量和冗余代码
- 缺点:每个接口请求都需要查找,性能低,若用户端发生问题,根据版本号也并不方便定位,实现也比较复杂
3 . 分别定义各版本controller,当接口有大变动时,copy出新的controller,将有变动的action指向新的action路径,其他的action还是指向原来路径,不做改动。
- 优点:实现简单,每个版本使用的接口及其映射的action都非常清晰,也能够方便地对每个版本接口进行控制,并且代码不冗余。
- 缺点:每次新版本都得新写controller,不同版本的model和component没隔离,会相互污染(但二者通常都是原子性的,不会做大改动)
4 . 按模块划分,controller中的action按3实现
- 优点:每个模块特有的部分都会分散在模块中
- 缺点:model、compenent等会出现各种版本model、component,过于零散,维护困难;新代码调用老代码的方法,若不直接copy老代码,调用老module中的特性,攀枝错节依赖太多。