APP接口版本兼容的問題

如今基本每一個公司都作APP,因此你們都面臨 APP接口版本兼容的問題。php

iOS和android 要不斷開發新版本,不少服務端開發都是在之前接口的邏輯上進行修改。新的APP和接口開發後,接口如何兼容老的APP?java

有的公司 每次發佈完APP,就強制用戶更新到最新版本。不推薦這樣,由於用戶體驗太差。android

就算是用 強制更新,在蘋果審覈期間,新的APP接口和 老的接口 也必須能同時使用。api

下面咱們說下如何作,你們有不一樣意見能夠 留言討論。服務器

 

1、客戶端 作兼容,接口不用作兼容微信

一、APP強制更新(不建議)負載均衡

接口URL:api.xxx.com/v1.0/xxxx.javaide

接口的URL中加入版本號,如上:v1.0。測試

每次發佈新APP版本就強制更新。url

灰度服務器 部署正在審覈中的 接口版本(如:v1.1)。等審覈經過後,將老版本的APP設置強制更新,這樣老的接口就不用了。

而後把線上服務器從新部署上最新的代碼,再去掉灰度服務器。

這樣APP接口所有訪問正式的線上服務器。

二、熱更新

緊急的小需求能夠用熱更新,大的需求建議仍是用原生的代碼,由於你用熱更新修改完(用JS或Lua),最後還要在原生代碼裏修改。

網遊用熱更新的比較多,由於網遊的APP太大,不可能加個小關卡 就要求用戶從新下載,而且遊戲更新比企業級APP更頻繁,用熱更新能夠不斷新加關卡、場景、活動推廣。

三、React Native 和Weex

Weex比React Native好用,建議你們能夠嘗試下。我的建議先不要 大範圍用它們來作,畢竟它們只是第三方的東西,有的東西也不太完善。

 

2、服務端 作 版本兼容

所有接口版本是否統一:

  • 全部的接口都用 相同的版本號:這樣要發一個APP新版本就統一修改版本號,好修改,可是若是想修改其中一個接口的版本號就不行了。

  • 每一個接口的版本號能夠不同:這樣比較靈活,建議這樣作。

由於已經好多年沒有作過服務端了。下面的看法若是有錯誤,但願指正。

一、每一個接口邏輯裏 加if 判斷(不建議)

接口URL:api.xxx.com/api?version=v1&..

if (version == ‘1.5.0’) {
  do_something
} else if (version ==‘1.4.0') {
  do_something
}

 

優勢:實現簡單

缺點:不一樣版本的邏輯都在一個方法裏,在於容易形成代碼混亂,不利於維護。

二、不一樣的文件夾

至關於每一個接口版本都是一個獨立的項目。放到服務器的獨立文件夾裏。

例如:

接口URL:api.xxx.com/v1.0/xxxx.php

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

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

文件夾位置:Controller/V2.1/

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

優勢:版本邏輯分開維護。看url就能知道哪一個版本。刪除多餘版本 不用修改代碼。

缺點:同個接口不一樣版本 文件是重複的。而且 若是有個接口前幾版就有問題,一直遺留到如今,就須要改好幾套同樣的代碼。

三、不一樣版本 用不一樣的方法 :

相似:

接口URL:api.xxx.com/v1.0/xxxx.php

class XXXX{

    public functionV1_0() { }

    public functionV2_0() { }

}

 

java或者C# 都有路由配置,能夠用路由配置不一樣版本的URL跳轉到不一樣的方法裏。

四、用繼承的方式

「一瓶真情」在評論中回覆:採用繼承的方式,既能夠利用以前的接口代碼,又能夠採用override的方式修改部分接口的實現。

這樣是能夠的。可是若是你上個版本(也就是父類)修改了代碼,就會影響後面的全部版本。
在線上有bug或者需求變動的時候 極可能會修改基類。

你們能夠討論下。

五、部署到不一樣的服務器

「xuanbg」在評論中回覆:

不一樣版本不一樣分支,部署在不一樣的服務器上。若是某個版本用不到了,直接幹掉服務就行了。

例如我如今的API要從1.x升到不兼容的2.0版本了,那就給當前的發佈分支打個Tag。等哪天1.x版的API須要fix bug,就能很簡單地從這個Tag切一個1.x的分支出來fix bug後進行測試發佈,並且這個分支不會合併到任何分支,因此不會影響其餘版本。
這個方案 很差的地方在於,若是2.0也有一樣bug的話,也要在2.0分支上改一遍。若是版本不少的話,這活就很差幹了。因此呢,通常不會同時發佈兩個以上的版本,在升級不兼容的第三個版本前,必定會把第一個版本幹掉。

可是好比 淘寶、微信 ,有的時候忘記更新了,你會發現淘寶已經升級過四、5個版本了,而後老版本還能用。也就是有的APP確實須要兼容四、5個版本。
另外,若是要兼容過多的版本,服務器也須要夠多才行。同時,由於老版本的人用的少,也就是有的服務器訪問量不多,有的服務器訪問量不少。不能真正的負載均衡,浪費了服務器資源。

六、混合使用

「 Tokyo^hot」在回覆中說到兩種方式的混合使用。服務端的幾種方法混用:

6.一、第3種和第4種方法一塊兒用。先用繼承,若是新版本和之前的版本沒法複用,就用路由設置新的方法。

6.二、第1種方法和第3中方法一塊兒用,簡單的小改動用 第1種,加個if判斷。改動較大的用 第3種,新開個方法。

 

3、結尾

本身 已經有好幾年沒作 服務端了。若是你們有什麼好辦法,能夠留言,謝。

接口兼容其實主要是服務端的任務。APP的工做量相對簡單。

你們都是怎麼作的?

 

 

歡迎關注 今日頭條號 名稱: 雲端夢想科技  

歡迎關注 微信公衆號:dreams2999

相關文章
相關標籤/搜索