美文网首页iOS 开发技巧iOS Developer
iOS开发之如何模拟数据(二)

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

作者: Daniel_Guo | 来源:发表于2017-07-10 16:35 被阅读252次

    简述

    关于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

    相关文章

      网友评论

      • a5a2b92ecd85:总希望有一天
        后台开发swift也能占据半壁江山
        这样我就不用掌握太多类型的语言
        Daniel_Guo:@王家伟 如果有很多好用的框架的话会实现的,所以要支持

      本文标题:iOS开发之如何模拟数据(二)

      本文链接:https://www.haomeiwen.com/subject/xjoyhxtx.html