iOS開發之模擬介面假資料

weixin_33890499發表於2017-12-28

一、前言

我們在iOS開發的過程中,往往後端和前端都是並行的,當後端的介面沒有完善的時候就會影響到我們的開發,而我也在我程式設計的過程中也經歷過很多方法去製造假資料,下面我就一一說一下吧。

二、方法

下面我們以如下的JSON欄位進行一下說明

{

"code": 0,

"message": "成功",

"data": {

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

"list": [

{

"day": "30",

"month": "10",

"year": "2017"

}

]

}

}

2.1 Dictionary假資料

這種方法應該說是最不建議使用的方法了。假設我們工程中使用的是JSModel進行Model層轉換的。

我們需要這樣寫一個NSDictionary

7877747-b914d5fa39f975a4

請點選此處輸入圖片描述

如圖所示我們就可以這樣去寫假資料了。這種方法是每次都要去修改和編輯大量程式碼,並且關於網路請求的程式碼還測試不了,不推薦使用。

2.2 搭建後臺假資料

我們可以本地用搭建一個網站環境或者使用遠端伺服器去請求。

我會儲存一個json檔案,然後用一個php檔案去呼叫。

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

$test = $_POST["s"];

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

echo $json_string;

這種情況下,我們可以直接把app端的網路請求程式碼全部寫好,就相當於模仿後臺的介面一樣,到時候切換後臺介面我們只需要更換下介面地址就行了。

2.3APP端修改伺服器資料

這裡我們以 AFNetworking2.x 為例使用 NSURLProtocol 攔截 HTTP 請求。

建立NSURLProtocol的一個子類,重寫裡面的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];

}

}

此方法我們可以把相關網路請求寫好,然後原生程式碼攔截後臺的網路請求,用假資料修改就行了。以上只是一個原理的演示,實際開發,推薦使用強大的開源庫OHHTTPStubs, 他可以偽造的網路資料和模擬的緩慢網路來進行除錯。

2.4代理攔截網路請求

這個是我比較推薦的一個方案,不需要修改app端程式碼。一切無損對接後臺。

這就是利用代理軟體的 Map Local 功能,將請求轉換為請求電腦本地的靜態json檔案。

我們以Charles為例,我們把本地的介面寫好之後,我們使用Charles抓一下這個介面的請求,此時肯定是失敗的。

如圖:

我們去 Map Local 指向電腦中的一個json檔案。

如圖:

這樣我們就將此介面指向了電腦本地的一個json檔案,我們可以用此方法,將所有的介面都分別指向本地的各自的 json 檔案,當後臺介面完畢後,我們就可以關閉 Map Local 無縫銜接到真正的後臺。

三、總結

以上四個方法,我的推薦程度是由小到大的。我認為最好不要去動APP的程式碼,所以我推薦第四種,趕快去嘗試一下吧!

相關文章