iOS開發(fā)之如何模擬數(shù)據(jù)(二)

簡(jiǎn)述

關(guān)于iOS客戶端在模擬數(shù)據(jù)的時(shí)候如何避免污染代碼撒妈,之前已經(jīng)寫過如何通過charles代理攔截請(qǐng)求,返回本地構(gòu)造的假數(shù)據(jù)。iOS開發(fā)之模擬數(shù)據(jù)(一)排监,而本篇主要介紹另外一種方法狰右,通過搭建本地服務(wù)器的方式,返回構(gòu)造的數(shù)據(jù)舆床。

本地服務(wù)器介紹:

如果你會(huì)編寫python棋蚌、javaphp等后臺(tái)語音挨队,那么你可以自己輕松搞一個(gè)本地服務(wù)器進(jìn)行測(cè)試谷暮,如果不會(huì)怎么辦?相信大家都知道swift已經(jīng)支持后臺(tái)開發(fā)盛垦,并且支持跨平臺(tái)(linux湿弦,macOS(OS X),iOS)腾夯,并且現(xiàn)在已經(jīng)出現(xiàn)了很多比較知名的swift服務(wù)器框架(Perfect颊埃、Vapor蔬充、KituraZewo等) 班利,接下來主要介紹如何通過Perfect搭建一個(gè)本地服務(wù)器饥漫,并返回模擬的數(shù)據(jù),至于為什么選擇Perfect罗标?因?yàn)?code>Perfect相對(duì)于其他框架性能更快庸队,知名度也更高。

但是就像在iOS開發(fā)之模擬數(shù)據(jù)(一)中說的闯割,這種方式也會(huì)產(chǎn)生測(cè)試代碼(把域名改為本地服務(wù)器的域名)皿哨,需要在發(fā)布的時(shí)候修改過來。

Perfect介紹:

Perfect是一個(gè)使用Swift編程語言開發(fā)Web和其他REST服務(wù)的框架纽谒,其主要目標(biāo)是簡(jiǎn)化需要后端服務(wù)器軟件的移動(dòng)應(yīng)用的開發(fā),使開發(fā)人員可以使用同一種語言進(jìn)行客戶端和服務(wù)端開發(fā)如输。

因?yàn)槭腔赟wift開發(fā)鼓黔,所以對(duì)于在iOS平臺(tái)上可以達(dá)到客戶端與服務(wù)端使用相同的類和一些封裝好的工具,一定程度上可以減少代碼重復(fù)不见,這一點(diǎn)有點(diǎn)像Android與Java服務(wù)器協(xié)作的好處澳化,它完全支持使用Xcode開發(fā)和調(diào)試。由于Swift的開源特性稳吮,所以它必須能夠在Linux上跑起來缎谷。

Perfect的工程可以在git上查看并且附有Demo,官網(wǎng)也有關(guān)于Perfect的詳細(xì)文檔與很多視頻教程
git:https://github.com/PerfectlySoft/Perfect
官網(wǎng):https://www.perfect.org
Perfect主要包含以下組件灶似。詳細(xì)查閱
http://www.infoq.com/cn/news/2015/11/perfect-swift

Perfect搭建服務(wù)器流程

1列林、從遠(yuǎn)程git倉(cāng)庫拉取代碼

1.png

2、編譯模板代碼酪惭,并開啟服務(wù)器

2.png

3希痴、在瀏覽器地址欄輸入:http://localhost:8181 驗(yàn)證服務(wù)器是否正常

5.png

如何模擬數(shù)據(jù)

上面介紹了Perfect官方demo的使用,我們可以看到上面demo中服務(wù)器只返回了一個(gè)hello春感,world的字符串砌创,但是在實(shí)際的iOS客戶端開發(fā)中,大部分返回的應(yīng)該是json數(shù)據(jù)鲫懒,那么接下來我們就模擬一下json數(shù)據(jù)并返回嫩实。

1、進(jìn)入Sources目錄窥岩,編輯main.swift


import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

// An example request handler.
// This 'handler' function can be referenced directly in the configuration below.
func handler(data: [String:Any]) throws -> RequestHandler {
    return {
        request, response in

        //設(shè)置返回的數(shù)據(jù)類型
        response.setHeader(.contentType,value:"application/json")
        //模擬json數(shù)據(jù)
        let data:[String:Any] = [
            "respcd":"0000",
            "data":["hotTopics":[
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小黃老師",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200518955.jpg",
                 "authorAvatar":"http://gaopin-preview.bj.bcebos.com/133200518470.jpg"],
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小郭老師",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200511150.jpg",
                 "authorAvatar":"http://gaopin-preview.bj.bcebos.com/133200511116.jpg"],
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小王老師",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200527866.jpg",
                 "authorAvatar":"http://mpic.tiankong.com/3b3/4a1/3b34a176b15a7fbad2859ce70b8d14cf/640.jpg@360h"],
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小李老師",
                 "thumbnail":"http://mpic.tiankong.com/1d0/7ac/1d07ac0b780fe16ee6d66b7277900563/640.jpg@360h",
                 "authorAvatar":"http://mpic.tiankong.com/a20/eaf/a20eaf991de87eed5042525226d00309/640.jpg@360h"],
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小趙老師",
                 "thumbnail":"http://mpic.tiankong.com/dbc/27d/dbc27d13e6a2e09cb719f0ef4ff68c28/640.jpg@360h",
                 "authorAvatar":"http://mpic.tiankong.com/07c/fe8/07cfe85595cf4a84df8a8f66409e83de/bld031659.jpg@360h"],
                ["title":"這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題這是一個(gè)標(biāo)題",
                 "author":"小張老師",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200511150.jpg",
                 "authorAvatar":"http://gaopin-preview.bj.bcebos.com/133200511116.jpg"]
            ]]]
        
        do{
            //框架中帶有json解析框架
            try response.setBody(json: data)
        }catch{
            //....
        }
        
        
        // Ensure that response.completed() is called when your processing is done.
        response.completed()
    }
}

// Configuration data for an example server.
// This example configuration shows how to launch a server
// using a configuration dictionary.


let confData = [
    "servers": [
        // Configuration data for one server which:
        //  * Serves the hello world message at <host>:<port>/
        //  * Serves static files out of the "./webroot"
        //      directory (which must be located in the current working directory).
        //  * Performs content compression on outgoing data when appropriate.
        [
            "name":"localhost",
            "port":8181,
            "routes":[
                //設(shè)置接口路徑
                ["method":"get", "uri":"/explore/hotTopics", "handler":handler],
                ["method":"get", "uri":"/**", "handler":PerfectHTTPServer.HTTPHandler.staticFiles,
                 "documentRoot":"./webroot",
                 "allowResponseFilters":true]
            ],
            "filters":[
                [
                "type":"response",
                "priority":"high",
                "name":PerfectHTTPServer.HTTPFilter.contentCompression,
                ]
            ]
        ]
    ]
]

do {
    //開啟服務(wù)器
    try HTTPServer.launch(configurationData: confData)
} catch {
    fatalError("\(error)") // fatal error launching one of the servers
}



2甲献、編譯代碼并開啟服務(wù)器

swift build
./.build/debug/PerfectTemplate

8.png

3、瀏覽器訪問輸入請(qǐng)求路徑: http://localhost:8181/explore/hotTopics

6.png

4颂翼、客戶端訪問指定接口:

7.png

總結(jié)

以上就是通過swift的Perfect框架搭建一個(gè)本地測(cè)試服務(wù)器的流程竟纳,如果感覺不錯(cuò)記得點(diǎn)贊撵溃。

參考鏈接:

  1. http://www.reibang.com/p/2ce98b556e89
  2. https://github.com/PerfectlySoft/PerfectTemplate
  3. http://blog.csdn.net/u011303663/article/details/55101302?utm_source=itdadao&utm_medium=referral
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锥累,隨后出現(xiàn)的幾起案子缘挑,更是在濱河造成了極大的恐慌,老刑警劉巖桶略,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件语淘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡际歼,警方通過查閱死者的電腦和手機(jī)惶翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹅心,“玉大人吕粗,你說我怎么就攤上這事⌒窭ⅲ” “怎么了颅筋?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)输枯。 經(jīng)常有香客問我议泵,道長(zhǎng),這世上最難降的妖魔是什么桃熄? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任先口,我火速辦了婚禮,結(jié)果婚禮上瞳收,老公的妹妹穿的比我還像新娘碉京。我一直安慰自己,他們只是感情好螟深,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布收夸。 她就那樣靜靜地躺著,像睡著了一般血崭。 火紅的嫁衣襯著肌膚如雪卧惜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天夹纫,我揣著相機(jī)與錄音咽瓷,去河邊找鬼。 笑死舰讹,一個(gè)胖子當(dāng)著我的面吹牛茅姜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钻洒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奋姿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起素标,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤称诗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后头遭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寓免,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年计维,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袜香。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲫惶,死狀恐怖蜈首,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欠母,我是刑警寧澤欢策,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站艺蝴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鸟废。R本人自食惡果不足惜猜敢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盒延。 院中可真熱鬧缩擂,春花似錦、人聲如沸添寺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽计露。三九已至博脑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間票罐,已是汗流浹背叉趣。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留该押,地道東北人疗杉。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚕礼,于是被迫代替她去往敵國(guó)和親烟具。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梢什,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件朝聋、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 想將腦袋里面所有的詞匯 都抖出來 像從袋子里抖杏核 他們 飄在我眼前 閃耀或暗淡 我閉著眼 點(diǎn)兵點(diǎn)將 將被點(diǎn)到的詞...
    桔樹上閱讀 369評(píng)論 2 2
  • 二零一七年八月二十五日 姓名:李義 公司:慈溪?jiǎng)?chuàng)鑫車輛零部件有限公司 組別:259期利他二組 【知~學(xué)習(xí)】 背誦 ...
    六度輪回閱讀 145評(píng)論 0 0
  • 2017.06.15 面試培訓(xùn)最后一節(jié)課嗡午,我依然遲到,這次被關(guān)在門口玖翅,進(jìn)不去翼馆。自己時(shí)間觀念真的需要好好修正了,這么...
    唯有源頭活水來閱讀 102評(píng)論 0 0