后端自动化版本管理,不再用改URL了!

每次升级接口版本时,后端、前端、客户端都是痛苦的:前端

后端:要兼容旧版客户端,之前的接口不能动啊,又得写新接口、新文档了,唉!git

前端:还好,就是版本号处处都是,改起来比较烦。github

Android:快点啊产品催需求呢,服务器别停过久。对了你知道编译一次要多久么?泪奔。。。json

前端:对对,别停过久。还有文档别再写错了啊,上次你复制粘贴的 v3 害我接口调了半天,原来是 v4 。。。后端

iOS:我也被坑了。。。api

后端:呃,我尽快,写文档会注意的哈。服务器

后端:另外旧域名 http://api.aaa.com/v4 也会一直开着,保证不会像上次那样让3.0客户端请求挂的。框架

后端:@前端 对了,大家用一个全局的 BASE_URL 存起来,之后改一个地方就行了。ide

Android:咱们就是这么干的嘿嘿!函数

iOS:咱们也是,仍是我封装的。

iOS:但问题是每每多个接口版本并存,仍是要写好几个BASE_URL,咱们这是从BASE_URL_V2到BASE_URL_V4。

Android:唉,这个就没办法了。

前端:咱们如今也是这么作的,但以前的那家伙没封装啊,写获得处都是。。。

 

 

后端:周哥,升级接口版本好烦啊,你有什么好的办法吗?

周哥:具体说下你的问题。

后端:每次都要写新的接口和文档,服务器也要重启,前端和客户端老是抱怨改域名和文档错误。

项目很赶,文档是复制粘贴的,老是会落下某些地方没改。 
     可是不复制粘贴吧,你看看这格式,从新写实在是太麻烦了!

周哥:哈哈,之前咱们也老是碰到这种问题,如今解决了。试试这个

周哥:https://github.com/TommyLemon/APIJSON

后端:哇,竟然还有这么厉害的后端框架啊!我只用过SSH。

周哥:我也是上个月才知道的,朋友推荐的,我试了一周,很是好用,也没啥大的问题,就整到项目中了。

周哥:SSH过重了,老项目中APIJSON主要用来实现新接口,新项目就只用APIJSON了。

后端:能够的。不过它怎么解决版本问题呢?文档里没说啊。

周哥:写在最下面了。 http://apijson.org/

后端:可在最外层传版本version来指定使用的版本,不传或 version <= 0 则使用最新版。 ??

周哥:描述确实比较简单,我就问了下做者,他是这么说的:

 

TommyLemon:

能够在请求时传入一个version来指定使用的接口版本号,例如查询用户隐私信息:

URL: http://apijson.cn:8080/gets

表单:

{
    "Privacy": {
        "id": 82001,
        "_password": "123456"
    },
    "tag": "Privacy",
    "version": 1
}

并且只须要登陆时传一个全局默认version,以后全部须要登陆的接口(通常占绝大部分)就都默认用这个了。

{
    "type": 0,
    "phone": "13000082001",
    "password": "123456",
    "version": 1
}

因此查询用户隐私信息就能够省略version了:

{
    "Privacy": {
        "id": 82001,
        "_password": "123456"
    },
    "tag": "Privacy"
}

由于上面传的version和全局默认version同样,因此服务器返回的结果都同样:

{
    "Privacy": {
        "id": 82001,
        "certified": 1,
        "phone": 13000082001,
        "balance": 8067
    },
    "code": 200,
    "msg": "success"
}

固然若是某个请求须要用到和全局默认version不同的接口,也能够指定当前的version:

{
    "Privacy": {
        "id": 82001,
        "_password": "123456"
    },
    "tag": "Privacy",
    "version": 2
}

因为第2版接口改了校验配置,因此返回结果就不同了:

{
    "Privacy": {
        "id": 82001,
        "_password": "123456"
    },
    "code": 406,
    "msg": "Privacy不容许传 _password 等[_password, _payPassword]内的任何字段!"
}

注:这个接口须要登陆权限,请先点击右上角登陆后再请求。

APIJSON在线测试

 

 

周哥:我照着这个来,在测试网页一个个试了,确实是这样的。

后端:但还有个问题,项目中可能多个版本并存,它是否是也要同时维护多个版本啊?

周哥:哈哈,之前只有两种作法:

1.前端根据的需求调对应版本的api,后端只新增对应新需求的api。

      2.前端只用一个版本,后端对新版不须要改的api v2也提供一个对应新版的api v3,而后和v2同样处理,能够提取v2的代码为一个公共的函数。

        或者就干脆重定向到v2,这个操做简单些,但要损失一些性能。

周哥:用APIJSON就只须要把原来旧版的api改下版本号version为一个统一的最新版,请求中传的version若是不存在,则会自动转到比它高的最接近版本。

后端:也就是我把v1,v2都改为v3,而后前端传v1或v2过来,它就转到v3了?若是不改的话仍是转到v2?

周哥:对的。若是不传version或version<=0,就会强制用最新版。这个在修复某些api漏洞时颇有用,把前端请求中的version去掉或者改为0,就能够了。

后端:我以为能够直接把api的version改为最新版,这样更简单。

周哥:确实,小伙子你很聪明啊。

后端:哈哈,谢谢周哥,我去试试。

后端:做者很牛啊

周哥:哈哈,我以前也好奇什么人能写出这样的框架。

周哥:接口都不用写了,都是框架自动实现的,话说如今终于没人再催接口了哈哈!

后端:真的很好用啊,之后就让前端客户端都在登陆时传一个version就搞定了。

后端:不过项目中还有些不须要登陆就能访问的接口,例如注册、找回密码等,这些就只能每次都传一个version了。

周哥:是的,不过绝大部分接口都是要登陆后才能访问的啊。

后端:也是啊。

后端:对了,普通的查询请求好像没version的示例啊。

周哥:由于不须要哈哈,做者说GET,HEAD请求都是开放请求,没有版本限制。我试过了确实是这样。

后端:也就是不用传version?

周哥:是的,并且请求很是灵活,能够定制请求的内容、JSON结构,一大堆查询请求的接口都不用本身写了。

后端:这样啊,太棒了,我去Star一下。

 

 

后端:@前端 @Android @iOS 新版接口写好了。

后端:你们把新版请求的主域名改为 http://api.aaa.com,之后登陆时再传一个version就行了。

{ "version":5 }

前端:这么快?

iOS:这么快?

Android:这么快?

后端:用了新框架嘿嘿!

Android:不用换版本号v5了?

iOS:之后会要加上吗?

后端:不用了,之后也不用 v6,v7 了,域名不会再改了。

iOS:那不须要登陆的接口呢?

后端:不用管,这几个接口很稳定,暂时不会动的。

Android:能够的

iOS:赞

前端:厉害,怎么作到的啊?

后端:你们看下这个,咱们后端之后的接口都用新框架写。

后端:https://github.com/TommyLemon/APIJSON

iOS:支持

前端:+1

Android:好棒,我也玩一玩后端嘿嘿!

 

 

APIJSON - 自动化接口和文档

Github源码及文档(右上角点Star支持下吧^_^

https://github.com/TommyLemon/APIJSON

下载客户端(测试服务器地址:http://apijson.cn:8080

APIJSONClientApp.apk

相关文章
相关标签/搜索