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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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