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


每次升級接口版本時,后端、前端、客戶端都是痛苦的:

后端:要兼容舊版客戶端,以前的接口不能動啊,又得寫新接口、新文檔了,唉!

前端:還好,就是版本號到處都是,改起來比較煩。

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM