如題:談一談APP版本號問題服務器
爲何要談這個問題,週五晚上11~12點,被微信點名,說APP有錯,無效的版本號,商城沒法下單。
我正在準備收拾東西,週末回老家,結果看到這樣問題,菊花一緊。
我擦,我剛加的版本號檢查,在加版本號檢查前,我還跟統計的妹妹仔細覈對了近半年來全部的版本號,怎麼還會有問題。
趕忙查,原來結果,看到了一個g1_2.5.5_65,在個人一再追問下說這個就是2.5.5的版本號。
而後我們來講一說爲何要加版本號檢查,而後再說,爲何會加出問題來,最後在討論一下版本號規則。
題外話跟你們探討一下version這樣的參數怎麼傳遞比較合理。微信
首先在APP發版過程當中,因爲新的版本上有新的功能,有些須要和老的版本作兼容,因此很是有可能服務器端須要知道APP的版本號,
而服務器在升級服務和本身的API也必定有版本號的概念,雖然不少時候咱們可能注意不到,可是版本號這個必定是雙方互相都存在的。
我就是在這樣的一個情景下,咱們的新的功能要同時須要兼容新的老的APP,因此服務器須要知道全部APP的版本號,這是須要APP傳給服務的參數。
同時服務器也須要在基於某個版本號好比2.8.5作版本號大小的判斷。
好比說小於2.8.5的版本號,那麼就是老的邏輯,而大於等於2.8.5的版本就是新的邏輯。這多是基於版本號的最簡單的兼容邏輯了。ide
到這裏有心的讀者必定看出了說爲何加個版本號也會加出問題來了,對這就是加個版本號檢查也加出問題的緣由。
我在加檢查前,不肯定咱們的版本號的規則,而後我找統計妹妹仔細統計了近半年的全部的版本號,獲得的結果是咱們的版本號是x.x.x這樣的號碼,
x必定是數字,那這麼看來沒有問題,我就按這個規則解析比較,結果當遇到上邊看到的g1_2.5.5_65這個版本號時,直接numberformatexception.
還好,咱們的處理很是之果斷,在版本檢查時出裏任何異常,都提示用戶版本太低,讓用戶升級。
但一樣暴露出了咱們不少的問題,咱們的APP通過兩年多的發版居然歷來沒有統一過版本號,甚至規則都沒有統一過。
再次追問下去,說因爲不一樣的下載渠道和推送渠道,咱們會寫上不一樣的版本號,這個答案的結果我固然不滿意。
心中可能是無奈也沒有辦法,因而乎推動版本號趕忙統一,至少在規則上能有一個能夠統一解析的規則。
這裏的一個事情作得好的就是至少咱們還有版本號,不管當時服務器使用沒有使用版本號,至少APP是傳了的。
須要注意的是,版本號這個東西不能隨意寫,也不能隨意規劃,這個須要統一規劃,並且越快越早規劃越好。post
那麼這裏就引出了第三個問題,版本號的規則問題,關於這個問題,我不想深刻探討和研究。
百度「軟件開發版本號規則」或者「軟件開發版本號命名規範」講的很是之詳細,很是明白,很容易理解。
我想說的不管怎麼樣必定要指定一個本身能夠統一解析的規則和規範,只要按照規則和規範必定能很好的處理版本號。
我比較推薦的使用的版本號有兩種,
1是:主版本號.次版本號.修訂版本號.日期版本號
2是:主版本號.次版本號.修訂版本號.構建版本號
這樣的一組號碼,清晰明瞭,足夠用了。網站
最後談一談版本號怎麼傳遞比較合適,首先咱們不說APP,咱們作服務器端開發特別是RESTAPI時必定也遇到過說一個API的version問題,
網上不一樣的人有不一樣的看法,不一樣的網站有不一樣的實現方式,我說一下我知道的常見的幾種方式:
一、在http header中傳遞,例如:header.set("version","2.8.5")
二、在使用url path的方式,例如:/www.xxx.com/order/v2.8.5/create
三、使用url query paramter的方式傳遞,例如:/www.xxx.com/order/create?v=2.8.5
四、使用form表單提交version,(這個貌似極其少見)例如:<form method="post|get" action="/order/create"><hiden name="version" value="2.8.5"/>...</form>
這個明白了以後那麼APP給服務器傳參,也無外乎這幾種方式,具體使用哪一種中方式能夠根據本身的喜愛而定。
貌似我在某一篇文章中看到說雖然使用url path的方式比較直觀,有些大型的網站也在使用,可是REStful的規範說要在header中使用version纔算正統。
這個就無所謂了,我感受都行,以前老大還跟我爭執過這個,我說要加在url path中就是使用第二種方式,結果老大不一樣意,說你這樣未來要維護一堆的url,v1,v2會很麻煩。
說推薦第一種,我比較執拗的按第二種方式作了,後來另外一個同事也討論起這事,所就按第二種方式比較好,這裏老大的態度變了,說啥啥啥公司都是第二種,我們也第二種吧,
我內心那個委屈,特麼,我早跟你說,你跟我還爭個毛線,我作都作了,還在我傷口上撒鹽。我跟老大爭這些是否是未來作不了老大,悲催。
如今想一想第三種也很是棒,真的也很是不錯的。url
好了今天,關於版本號討論就說這麼些吧。orm
歡迎你們評論發表意見或提出問題開發