app接口设计之不同版本统一管理

时间:2022-12-10 21:53:08

app接口设计之不同版本统一管理

前言:APP接口的开发不同于PC的开发,因为不同版本的APP之间,接口可以同时使用,老版本的APP在新版APP出来之后依然可以用,所以为了便于维护和管理,就有必要设计好APP接口的管理策略

APP更新接口在更新时需要传递的参数:版本号、更新内容(文字说明)、更新地址、是否强制更新

1、APP版本号1.2.3:APP版本分为大版本和小版本

APP接口设计及更新策略(推荐):
1)大版本更新(之前接口需要大量修改时叫做大版本更新,之前接口实在用不了了才会进行大版本更新):大版本更新时,需要把接口所在文档重新创建(相当于重新创建一个新的APP应用),使得其不同大版本之间接口相互独立,更易维护
2)小版本更新(对接口的小范围修改及新增叫做小版本更新):小版本更新时,需要在每个修改的接口中进行版本号判断,从而进行不同的分发

1、按照大版本不同进行接口设计(不同版本之间接口独立),统一入口,URL后跟上版本号,不同的版本不同的分发去处:

例如:

接口URL:

大版本1接口:api.xxx.com/controller_1/index.php?version=1.0.1
大版本2接口:api.xxx.com/controller_2/index.php?version=2.0.2

文件夹位置:Controller/V1.0/

-----------------/xxxx.php

文件夹位置:Controller/V2.0/

-----------------/xxxx.php

2、按照小版本的不同进行接口设计,每个接口里加上if判断:

例如:

接口URL:api.xxx.com/index.php?version=1.0.1

if (version == ‘1.0.1’) {
  do_something
} else if (version ==‘1.0.2') {
  do_something
}

以下是网上对于APP API需要同时维护多个版本如何设计的回答:

第一种(不同版本不同文件夹):

Controller/V1.0.0/
-----------------/UserController.php
-----------------/UploadController.php
-----------------/********************
Controller/V2.1.0/
-----------------/UserController.php
-----------------/UploadController.php
-----------------/********************

第二种(不同版本不同方法):

Controller/
----------/UserCreateController.php
----------/UserInfoController.php
----------/UploadImageController.php
UserCreateController.php 内容如下
<?php

class UserCreate extends ApiController{
public function v1_0_0(){

}
public function v2_0_0(){

}
}
?>

第三种(同一接口中进行逻辑判断,版本参数在URL中):

客户端在做请求的时候在接口中添加ver字段,标识出请求的是哪个接口:
● api.xxx.com/api?ver=v1&...
● api.xxx.com/api?ver=v2&...
这种做起来比较简单也容易理解,但是在你的每个接口逻辑里面都得需要写判断版本的代码了。比如
if ver == 'v1':
do_something_with_v1_style
elif ver == 'v2':
do_something_with_v2_style


第四种(同一接口中进行逻辑判断,版本参数在header头中):

客户端在做请求的时候在HTTP HEAD里面中添加API-VERSION字段,标识出请求的是哪个接口:
● -H "API-VERSION: v1"
● -H "API-VERSION: v2"
这个需要统一做的事情稍微有点多,但之后的接口逻辑会比较好些。在入口的地方获取接口版本,然后把请求分发到对应版本的接口处理器上。
api(req):
if req.HEADS["API-VERSION"] == 'v1':
distribute_to_v1_api(req)
elif ver == 'v2':
distribute_to_v2_api(req)

第五种(不同版本不同域名):

不同版本使用不同的域名,这样:
● v1.api.xxx.com
● v2.api.xxx.com
域名的方式可以采用下面的两种方式:
1、不同版本的api部署成不同的应用(甚至可以部署到不同的服务器上),彼此间独立,其好处是部署的过程不会影响其他版本api的使用,并且可以减轻单台服务器的负担。
2、部署在一个应用上面,但是和第四种一样,在接口入口出分发到不同版本的接口处理器上进行处理。好处是不同版本间能够直接复用相同的功能

第六种(不同版本用继承的方式复用):

采用继承的方式,既可以利用之前的接口代码,又可以采用override的方式修改部分接口的实现。
这样是可以的。但是如果你上个版本(也就是父类)修改了代码,就会影响后面的所有版本。
在线上有bug或者需求变更的时候 很可能会修改基类。