網(wǎng)絡(luò)層的重構(gòu)

由于2.0的需求還沒確定,最近的主要工作就是對程序優(yōu)化和重構(gòu);今天想對網(wǎng)絡(luò)層重構(gòu)工作的一些想法記錄下來,以便以后查看;

最初的網(wǎng)絡(luò)層采用的是開源框架ASIHttpRequest,后來改用了AFNetworking,基于AFNetworking自己簡單的封裝了一下,這里只有簡單的http請求,代碼如下:


然而初看起來,如果事先跟服務(wù)端有統(tǒng)一規(guī)范也沒什么,比如圖中紅色部分里面的retcode,服務(wù)端如果有多人開發(fā),而且他們沒有規(guī)范好返回值是什么時才正常,什么值時不正常,有人以0為正常,有人以1為正常,好,如果是這樣,沒問題,因為我可以用retcode>=0來判斷是否正常,但是如果異常呢?有人以小于0為異常,有的以大于0為異常,該怎么辦?說了這么多,估計都講懵了,好吧,我以我們項目來說。A:retcode==0時為正常,retcode>0為異常;B:retcode==1時為正常,retcode<0為異常,好,這時如果有個接口返回retcode==1,對A來說這是正常的,對B來說這是異常,這時怎么判斷?遇到這種情況最簡單的辦法,兩者分開唄,再封裝一個接口,專門針對這種情況,是不是好笑?你可以叫后臺統(tǒng)一啊,但事實上誰都不肯讓步,只能讓我來讓步唄,我再加一個接口唄,把調(diào)用AB的接口各用一套,其實里面只有很少的變化,就是紅色框的那一部分有點變化,真是操蛋!

然而細看起來,這么封裝,在遇到稍微復(fù)雜的情況下,就顯得非常脆弱。然而還不止是剛提到的問題,還有傳輸數(shù)據(jù)的時候,服務(wù)端A要求你只傳一個值json_data,就是要傳的參數(shù)先把它轉(zhuǎn)成json字符串,很多人是這樣做的,但也有要求你分開傳,這種情況,這么封裝的話又要改了,還有涉及到編碼的事,有的要求只urlEncode一次,有的要求兩次,更多的情況就不一一舉了,反正這么弄會有很大的局限性。

那么怎么封裝會好呢,我參考了唐巧的猿題庫網(wǎng)絡(luò)開源庫,把我不要用到的東西給刪了,又根據(jù)自己的業(yè)務(wù)做了一些修改,因為后續(xù)AFNetworking版本不再更新AFHTTPRequestOperation的版本了,故將用AFHTTPRequestOperation實現(xiàn)的方式換成了用AFHTTPSessionManager實現(xiàn);代碼就不貼出來了;

簡單思路就是將每個網(wǎng)絡(luò)接口以一個單獨的類去實現(xiàn),基類提供一些基本的接口,具體的接口類根據(jù)自己的業(yè)務(wù)需求可覆蓋基類的方法,如(檢查retcode正常異常,編碼類型,傳參方式,是否urlCoode,參數(shù)序列化類型,返回值序列化類型等),這樣業(yè)務(wù)需求改動,改起來也比較方便;

在重構(gòu)的過程中,也遇到過一些問題,比如一些編碼的問題,還有網(wǎng)絡(luò)上經(jīng)常有些人問為什么從ASI切換到AFNetworking時傳輸中文時不正常了或者服務(wù)端收不到數(shù)據(jù)呢?大家首先要有解決問題的思路,該怎么解決?我來簡單說一下,服務(wù)端收不到數(shù)據(jù),是什么原因,照這樣說應(yīng)該不是網(wǎng)絡(luò)的問題,你可以用抓包工具看看你到底發(fā)了什么東西出去了,推薦一個工具(Charles),這個工具還挺好用的,如果有東西發(fā)出去了,說明就是服務(wù)端那邊的問題了;服務(wù)端接收的東西有亂碼?亂碼的情況一般是在傳中文的情況下出現(xiàn)的,這個時候你就要弄清楚服務(wù)端那邊是怎么解碼的,我的項目這邊,服務(wù)端那邊要求客戶端兩次urlEncode,而我只是做了一次,這個時候?qū)σ獋鞯膮?shù)再urlEncode一次不就解決了;為什么呢?AFNetworking對參數(shù)只做了一次urlEncode,而ASI作了兩次;那為什么純英文不會呢?因為英文urlEncode后還是一致的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容