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

一、前言

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

一起學(xué)習(xí)iOS開發(fā),加群:681503716?加群邀請(qǐng)碼:【墨子】,一起來(lái)學(xué)習(xí)吧!

二、方法

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

{

"code": 0,

"message": "成功",

"data": {

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

"list": [

{

"day": "30",

"month": "10",

"year": "2017"

}

]

}

}

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

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

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

如圖所示我們就可以這樣去寫假數(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.3?APP端修改服務(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)大的開源庫(kù)OHHTTPStubs, 他可以偽造的網(wǎng)絡(luò)數(shù)據(jù)和模擬的緩慢網(wǎng)絡(luò)來(lái)進(jìn)行調(diào)試。

傳送門->OHHTTPStubs

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

這個(gè)是我比較推薦的一個(gè)方案,不需要修改app端代碼。一切無(wú)損對(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 無(wú)縫銜接到真正的后臺(tái)。

本文涉及到的部分代碼 -> 點(diǎn)我下載

三、總結(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)容

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