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

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

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

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://39.108.143.172/

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

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

TommyLemon:

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

URL: http://39.108.143.172: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

后端自动化版本管理,再也不用改URL了!的更多相关文章

  1. 教会舍友玩 Git (再也不用担心他的学习)

    舍友长大想当程序员,我和他爷爷奶奶都可高兴了,写他最喜欢的喜之郎牌Git文章,学完以后,再也不用担心舍友的学习了(狗头)哪里不会写哪里 ~~~ 一 先来聊一聊 太多东西属于,总在用,但是一直都没整理的 ...

  2. 保姆级神器 Maven,再也不用担心项目构建搞崩了

    今天来给大家介绍一款项目构建神器--Maven,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现:它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的.流行的构建工具,从此以后,再 ...

  3. 【阿里云产品公测】离线归档OAS,再也不用担心备份空间了

    [阿里云产品公测]离线归档OAS,再也不用担心备份空间了 作者:阿里云用户莫须有3i 1 起步  1.1 初识OAS  啥是OAS,请看官方说明: 引用: 开放归档服务(Open Archive Se ...

  4. 学会这个删库再也不用跑路了~ --技术流ken

    前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...

  5. 妈妈再也不用担心别人问我是否真正用过redis了

    1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ...

  6. 有了这个,再也不用每次连新机器都要设置secure crt属性了

    我连服务器用的是secure crt,每次ssh新服务器的时候都得手动设置字符编码和背景颜色,今天问了旁边的开发原来可以全局设置,以后连服务器的时候就再也不用手动设置相关属性了.步骤如下: 一开始点击 ...

  7. 锋利的js之妈妈再也不用担心我找错钱了

    用js实现收银功能. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  8. 有了 tldr,妈妈再也不用担心我记不住命令了

    引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...

  9. 妈妈再也不用担心我使用git了

    妈妈再也不用担心我使用git了 Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:ms ...

随机推荐

  1. flex的三个属性:

    (1)flex-grow:指的是相对于其他的子元素的扩展比率:默认值为0:数字 (2)flex-basis:指的是子元素的具体长度:可以为长度(rem,px,em)也可以为百分比: (3)flex-s ...

  2. EasyUI DataGrid使用示例

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="EasyUIDemo.aspx. ...

  3. 详解面向对象编程——JavaScriptOOP

        前  言 絮叨絮叨 学习了JS之后,不知道大家觉得怎们样呢? 今天我们就来讲一下JS中最重要的一个环节,JavaScript中的面向对象编程OOP,这里的东西有点难,也有点绕. 可是! 不要灰 ...

  4. 搭建阿里云 centos mysql tomcat jdk

    [toc] 阿里云使用centos 登录 http://www.aliyun.com/ 点击登录 进入控制 https://home.console.aliyun.com/ 云服务器 运行中 把ip输 ...

  5. win10 uwp 右击浮出窗在点击位置

    本文主要让MenuFlyout出现在我们右击位置. 我们一般使用的MenuFlyout写在前台,写在Button里面,但是可能我们的MenuFlyout显示的位置和我们想要的不一样. 通过使用后台写S ...

  6. 我的第一个python web开发框架(10)——工具函数包说明(一)

    PS:原先是想直接进入功能开发,要用到什么函数时再创建,这样也容易熟悉每个函数的由来和使用方法,但考虑到这样操作,到时会经常在不同文件间切换,不好描述,容易造成混乱,所以还是使用函数库这种方式来说明. ...

  7. 使用 Skeleton Screen 提升用户感知体验

    1024程序猿节"愿世界和平,没有bug",腾讯云社区向改变世界的程序猿致敬! 作者:陈纬杰 一直以来,无论是web还是iOS.android的应用中,为了提升应用的加载等待这段时 ...

  8. 【JAVA零基础入门系列】Day10 Java中的数组

    什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...

  9. mybatis generator eclipse插件的安装

    mybatis generator 可以提高开发速度,这个插件可以自动生成代码,创建DAO层相关代码,就像利用HIbernate反相生成一样,安装前可以先到百度网盘下载: 文件:MyBatisGene ...

  10. Linux系统EXT文件系统

    分区格式化(Linux创建文件系统):(假设需要格式化的分区为/dev/sdb1) 1. ext2文件系统和ext3文件系统的区别: ext2不支持日志文件系统,不会产生日志文件,ext3则会产生日志 ...