文档章节

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

孤独的探索号
 孤独的探索号
发布于 2017/11/21 13:27
字数 1917
阅读 1984
收藏 56

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

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

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

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

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

iOS:我也被坑了。。。

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

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

后端:@前端 对了,你们用一个全局的 BASE_URL 存起来,以后改一个地方就好了。

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

© 著作权归作者所有

共有 人打赏支持
孤独的探索号

孤独的探索号

粉丝 124
博文 22
码字总数 29359
作品 4
深圳
私信 提问
加载中

评论(14)

孤独的探索号
孤独的探索号
APIJSON -Java版: https://github.com/TommyLemon/APIJSON
APIJSON -Node版: https://github.com/TEsTsLA/apijson
APIJSON - C# 版: https://github.com/liaozb/APIJSON.NET
APIJSON - PHP版: https://github.com/orchie/apijson

APIJSON 接口工具: https://github.com/TommyLemon/APIJSONAuto
孤独的探索号
孤独的探索号

引用来自“av”的评论

哈了半天 没看懂

引用来自“孤独的探索号”的评论

就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON

引用来自“av”的评论

并不是每次我都需要登录

引用来自“孤独的探索号”的评论

是这样啊,所以版本号才能传入一次,到处使用

引用来自“av”的评论

我的意思是,我进系统不是每次都需要登录的,那 VERSION 传给谁。
需要进行版本控制的接口见右侧文档最下方的非开放请求的格式,可以通过点击左侧的 '/" 按钮显示:
http://39.108.143.172/
孤独的探索号
孤独的探索号

引用来自“av”的评论

哈了半天 没看懂

引用来自“孤独的探索号”的评论

就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON

引用来自“av”的评论

并不是每次我都需要登录

引用来自“孤独的探索号”的评论

是这样啊,所以版本号才能传入一次,到处使用

引用来自“av”的评论

我的意思是,我进系统不是每次都需要登录的,那 VERSION 传给谁。
不是每次需要登录的前提就是登录时后端保存了状态,例如session,在登录过期或退出登录前都可以免登录直接调用需要登录后才能调的接口。APIJSON正是基于这个原理,才实现了 一次上传、到处使用 对应版本的接口,就不用像以前那样每调用一个接口就得通过URL或者参数来传递版本号了。
APIJSON在线测试,点右上角登录试试自动化版本管理:
http://39.108.143.172/
av
av

引用来自“av”的评论

哈了半天 没看懂

引用来自“孤独的探索号”的评论

就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON

引用来自“av”的评论

并不是每次我都需要登录

引用来自“孤独的探索号”的评论

是这样啊,所以版本号才能传入一次,到处使用
我的意思是,我进系统不是每次都需要登录的,那 VERSION 传给谁。
孤独的探索号
孤独的探索号

引用来自“av”的评论

哈了半天 没看懂

引用来自“孤独的探索号”的评论

就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON

引用来自“av”的评论

并不是每次我都需要登录
是这样啊,所以版本号才能传入一次,到处使用
av
av

引用来自“av”的评论

哈了半天 没看懂

引用来自“孤独的探索号”的评论

就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON
并不是每次我都需要登录
孤独的探索号
孤独的探索号

引用来自“zqq90”的评论

请求中把 version 放到 HTTP header 如何?
是一种能指定接口版本的方法,不过这样做的话自动化版本管理怎么做呢?APIJSON提供了自动化版本管理,不需要改代码,也不需要重启服务器就能完成
https://github.com/TommyLemon/APIJSON
孤独的探索号
孤独的探索号

引用来自“av”的评论

哈了半天 没看懂
就是在登录时把 "version": 3 这样的键值对传到后端,之后可以不再传,默认用这个版本的接口,也不用像传统方式那样写 http://www.aaa.com/v3 这种随版本号变化的URL了。
项目源码及文档:
https://github.com/TommyLemon/APIJSON
Walamander
Walamander

引用来自“zqq90”的评论

请求中把 version 放到 HTTP header 如何?

好想法
av
av
哈了半天 没看懂
自动生成API和文档 - APIJSON

APIJSON English 通用文档 视频教程 在线工具 APIJSON是一种为API而生的JSON网络传输协议。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。 能大幅降低开发和沟通成...

孤独的探索号
2016/12/08
0
4
自动生成API和文档 APIJSON已发布

APIJSON是一种为API而生的JSON网络传输协议。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。 能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。 适合中小型...

孤独的探索号
2018/09/05
0
0
自动生成API和文档的工具源码分享

后端自动生成API和文档,前端定制返回JSON的数据和结构。 APIJSON是一种为API而生的JSON网络传输协议。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。 能大幅降低...

孤独的探索号
2018/08/27
0
0
完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制

相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能 自APIJSON发布以来,不断有网友拿来和Facebook开发的GraphQL对比,甚至不少人声称“完爆”APIJSON。 然而事实正好相反...

TommyLemon-GitHub
2018/06/05
0
0
APIJSON, 让接口和文档见鬼去吧!

我: APIJSON,让接口和文档见鬼去吧! https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种为API而生的JSON网络传输协议。 为 简单的增删...

孤独的探索号
2016/12/13
0
97

没有更多内容

加载失败,请刷新页面

加载更多

Httpd 整合 Tomcat 步骤

环境:Tomcat8 + Httpd2.4 工作原理:借助于Tomcat的AJP连接器实现Apache与Tomcat的通信 配置步骤: 1. 配置httpd.conf 新增: Include conf/extra/mod_jk.conf 修改:添加 index.jsp <IfM...

ZeroneLove
昨天
1
0
Docker笔记3——容器命令(未写完,明天整理接着写)

未写完,明天整理接着写 新建并启动容器 docker run docker run [OPTIONS] IMAGE [COMMEND] [ARG...] OPTIONS: --name=[容器新名字] :为容器指定一个名称 -d:后台运行容器,并返回容器ID,...

HappyBKs
昨天
1
0
2018个人年终总结

感谢领导的信任和指导,新的一年获得了很多成长和提高,改掉了很多不好的习惯。 在这一年里,我在领导的帮助下,主要完成了以下功能: 1、完成上海银行版本投资营销相关功能的开发。 2、完成车...

万山红遍
昨天
12
0
保密工作与linux系统的发展

保密工作从性质上可以分成商业方面的保密和国家安全方面的保密。由于自己从事的是IT方面的工作,工作中必然会接触涉及到计算机信息方面的相关文件。加上单位已近通过武器装备科研生产单位二级...

linux-tao
昨天
3
0
Spark共享变量

概述 Spark程序的大部分操作都是RDD操作,通过传入函数给RDD操作函数来计算。这些函数在不同的节点上并发执行,但每个内部的变量有不同的作用域,不能相互访问,所以有时会不太方便,Spark提...

仟昭
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部