iOS開發(fā)之模擬接口假數(shù)據(jù)

一、前言

我們?cè)趇OS開發(fā)的過程中,往往后端和前端都是并行的,當(dāng)后端的接口沒有完善的時(shí)候就會(huì)影響到我們的開發(fā),而我也在我編程的過程中也經(jīng)歷過很多方法去制造假數(shù)據(jù),下面我就一一說一下吧。

二、方法

下面我們以如下的JSON字段進(jìn)行一下說明

{

"code":?0,

"message":?"成功",

"data":?{

"website":"https://www.ianisme.com",

"list":?[

{

"day":?"30",

"month":?"10",

"year":?"2017"

}

]

}

}

2.1 Dictionary假數(shù)據(jù)

這種方法應(yīng)該說是最不建議使用的方法了。假設(shè)我們工程中使用的是JSModel進(jìn)行Model層轉(zhuǎn)換的。

我們需要這樣寫一個(gè)NSDictionary

請(qǐng)點(diǎn)擊此處輸入圖片描述

如圖所示我們就可以這樣去寫假數(shù)據(jù)了。這種方法是每次都要去修改和編輯大量代碼,并且關(guān)于網(wǎng)絡(luò)請(qǐng)求的代碼還測(cè)試不了,不推薦使用。

2.2 搭建后臺(tái)假數(shù)據(jù)

我們可以本地用搭建一個(gè)網(wǎng)站環(huán)境或者使用遠(yuǎn)程服務(wù)器去請(qǐng)求。

我會(huì)保存一個(gè)json文件,然后用一個(gè)php文件去調(diào)用。

header("Content-type:?text/html;?charset=utf-8");

$test?=?$_POST["s"];

$json_string?=?file_get_contents($test?.?'.json');

echo?$json_string;

這種情況下,我們可以直接把a(bǔ)pp端的網(wǎng)絡(luò)請(qǐng)求代碼全部寫好,就相當(dāng)于模仿后臺(tái)的接口一樣,到時(shí)候切換后臺(tái)接口我們只需要更換下接口地址就行了。

2.3APP端修改服務(wù)器數(shù)據(jù)

這里我們以 AFNetworking2.x 為例使用 NSURLProtocol 攔截 HTTP 請(qǐng)求。

創(chuàng)建NSURLProtocol的一個(gè)子類,重寫里面的startLoading方法。

-?(void)startLoading

{

NSMutableURLRequest?*mutableReqeust?=?[[self?request]?mutableCopy];

[NSURLProtocol?setProperty:@YES?forKey:hasInitKey?inRequest:mutableReqeust];

if([mutableReqeust.URL.description?containsString:@"api.ianisme.com"])?{

NSDictionary?*dic?=?@{

@"code":?@0,

@"message":?@"成功",

@"data":?@{

@"website":?@"https://www.ianisme.com",

@"list":?@[

@{

@"day":?@"30",

@"month":?@"10",

@"year":?@"2017"

}

]

}

};

NSData?*tempData?=?[self?toJSONData:dic];

NSString?*jsonString?=?[[NSString?alloc]?initWithData:tempData

encoding:NSUTF8StringEncoding];

NSData?*data?=?[jsonString?dataUsingEncoding:NSUTF8StringEncoding];

NSURLResponse?*response?=?[[NSURLResponse?alloc]?initWithURL:mutableReqeust.URL

MIMEType:@"text/html"

expectedContentLength:data.length

textEncodingName:nil];

[self.client?URLProtocol:self

didReceiveResponse:response

cacheStoragePolicy:NSURLCacheStorageNotAllowed];

[self.client?URLProtocol:self?didLoadData:data];

[self.client?URLProtocolDidFinishLoading:self];

}

else{

self.myConnection?=?[NSURLConnection?connectionWithRequest:mutableReqeust?delegate:self];

}

}

此方法我們可以把相關(guān)網(wǎng)絡(luò)請(qǐng)求寫好,然后本地代碼攔截后臺(tái)的網(wǎng)絡(luò)請(qǐng)求,用假數(shù)據(jù)修改就行了。以上只是一個(gè)原理的演示,實(shí)際開發(fā),推薦使用強(qiáng)大的開源庫OHHTTPStubs, 他可以偽造的網(wǎng)絡(luò)數(shù)據(jù)和模擬的緩慢網(wǎng)絡(luò)來進(jìn)行調(diào)試。

2.4代理攔截網(wǎng)絡(luò)請(qǐng)求

這個(gè)是我比較推薦的一個(gè)方案,不需要修改app端代碼。一切無損對(duì)接后臺(tái)。

這就是利用代理軟件的 Map Local 功能,將請(qǐng)求轉(zhuǎn)換為請(qǐng)求電腦本地的靜態(tài)json文件。

我們以Charles為例,我們把本地的接口寫好之后,我們使用Charles抓一下這個(gè)接口的請(qǐng)求,此時(shí)肯定是失敗的。

如圖:

我們?nèi)?Map Local 指向電腦中的一個(gè)json文件。

如圖:

這樣我們就將此接口指向了電腦本地的一個(gè)json文件,我們可以用此方法,將所有的接口都分別指向本地的各自的 json 文件,當(dāng)后臺(tái)接口完畢后,我們就可以關(guān)閉 Map Local 無縫銜接到真正的后臺(tái)。

三、總結(jié)

以上四個(gè)方法,我的推薦程度是由小到大的。我認(rèn)為最好不要去動(dòng)APP的代碼,所以我推薦第四種,趕快去嘗試一下吧!

?

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā),例如說新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,034評(píng)論 2 7
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,604評(píng)論 30 472
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,946評(píng)論 25 709
  • 這個(gè)夢(mèng)里迷離,現(xiàn)實(shí)清醒的浮沙時(shí)代。小學(xué)生是戀愛高手,大學(xué)生是墮胎專家,中年人是離婚精英,就連廣場(chǎng)邊上的老頭老太太們...
    三逗桑閱讀 193評(píng)論 0 0

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