iOS开发之如何模拟数据(二)

简述

关于iOS客户端在模拟数据的时候如何避免污染代码,之前已经写过如何通过charles代理拦截请求,返回本地构造的假数据。iOS开发之模拟数据(一),而本篇主要介绍另外一种方法,通过搭建本地服务器的方式,返回构造的数据。

本地服务器介绍:

如果你会编写pythonjavaphp等后台语音,那么你可以自己轻松搞一个本地服务器进行测试,如果不会怎么办?相信大家都知道swift已经支持后台开发,并且支持跨平台(linux,macOS(OS X),iOS),并且现在已经出现了很多比较知名的swift服务器框架(PerfectVaporKituraZewo等) ,接下来主要介绍如何通过Perfect搭建一个本地服务器,并返回模拟的数据,至于为什么选择Perfect?因为Perfect相对于其他框架性能更快,知名度也更高。

但是就像在iOS开发之模拟数据(一)中说的,这种方式也会产生测试代码(把域名改为本地服务器的域名),需要在发布的时候修改过来。

Perfect介绍:

Perfect是一个使用Swift编程语言开发Web和其他REST服务的框架,其主要目标是简化需要后端服务器软件的移动应用的开发,使开发人员可以使用同一种语言进行客户端和服务端开发。

因为是基于Swift开发,所以对于在iOS平台上可以达到客户端与服务端使用相同的类和一些封装好的工具,一定程度上可以减少代码重复,这一点有点像Android与Java服务器协作的好处,它完全支持使用Xcode开发和调试。由于Swift的开源特性,所以它必须能够在Linux上跑起来。

Perfect的工程可以在git上查看并且附有Demo,官网也有关于Perfect的详细文档与很多视频教程
git:https://github.com/PerfectlySoft/Perfect
官网:https://www.perfect.org
Perfect主要包含以下组件。详细查阅
http://www.infoq.com/cn/news/2015/11/perfect-swift

Perfect搭建服务器流程

1、从远程git仓库拉取代码

1.png

2、编译模板代码,并开启服务器

2.png

3、在浏览器地址栏输入:http://localhost:8181 验证服务器是否正常

5.png

如何模拟数据

上面介绍了Perfect官方demo的使用,我们可以看到上面demo中服务器只返回了一个hello,world的字符串,但是在实际的iOS客户端开发中,大部分返回的应该是json数据,那么接下来我们就模拟一下json数据并返回。

1、进入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

        //设置返回的数据类型
        response.setHeader(.contentType,value:"application/json")
        //模拟json数据
        let data:[String:Any] = [
            "respcd":"0000",
            "data":["hotTopics":[
                ["title":"这是一个标题这是一个标题这是一个标题",
                 "author":"小黄老师",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200518955.jpg",
                 "authorAvatar":"http://gaopin-preview.bj.bcebos.com/133200518470.jpg"],
                ["title":"这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题",
                 "author":"小郭老师",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200511150.jpg",
                 "authorAvatar":"http://gaopin-preview.bj.bcebos.com/133200511116.jpg"],
                ["title":"这是一个标题这是一个标题这是一个标题",
                 "author":"小王老师",
                 "thumbnail":"http://gaopin-preview.bj.bcebos.com/133200527866.jpg",
                 "authorAvatar":"http://mpic.tiankong.com/3b3/4a1/3b34a176b15a7fbad2859ce70b8d14cf/640.jpg@360h"],
                ["title":"这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题",
                 "author":"小李老师",
                 "thumbnail":"http://mpic.tiankong.com/1d0/7ac/1d07ac0b780fe16ee6d66b7277900563/640.jpg@360h",
                 "authorAvatar":"http://mpic.tiankong.com/a20/eaf/a20eaf991de87eed5042525226d00309/640.jpg@360h"],
                ["title":"这是一个标题这是一个标题这是一个标题",
                 "author":"小赵老师",
                 "thumbnail":"http://mpic.tiankong.com/dbc/27d/dbc27d13e6a2e09cb719f0ef4ff68c28/640.jpg@360h",
                 "authorAvatar":"http://mpic.tiankong.com/07c/fe8/07cfe85595cf4a84df8a8f66409e83de/bld031659.jpg@360h"],
                ["title":"这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题这是一个标题",
                 "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":[
                //设置接口路径
                ["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 {
    //开启服务器
    try HTTPServer.launch(configurationData: confData)
} catch {
    fatalError("\(error)") // fatal error launching one of the servers
}



2、编译代码并开启服务器

swift build
./.build/debug/PerfectTemplate

8.png

3、浏览器访问输入请求路径: http://localhost:8181/explore/hotTopics

6.png

4、客户端访问指定接口:

7.png

总结

以上就是通过swift的Perfect框架搭建一个本地测试服务器的流程,如果感觉不错记得点赞。

参考链接:

  1. http://www.jianshu.com/p/2ce98b556e89
  2. https://github.com/PerfectlySoft/PerfectTemplate
  3. http://blog.csdn.net/u011303663/article/details/55101302?utm_source=itdadao&utm_medium=referral
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 想将脑袋里面所有的词汇 都抖出来 像从袋子里抖杏核 他们 飘在我眼前 闪耀或暗淡 我闭着眼 点兵点将 将被点到的词...
    桔树上阅读 356评论 2 2
  • 二零一七年八月二十五日 姓名:李义 公司:慈溪创鑫车辆零部件有限公司 组别:259期利他二组 【知~学习】 背诵 ...
    六度轮回阅读 141评论 0 0
  • 2017.06.15 面试培训最后一节课,我依然迟到,这次被关在门口,进不去。自己时间观念真的需要好好修正了,这么...
    唯有源头活水来阅读 101评论 0 0