美文网首页iOS Developer
用Swift的框架Vapor写服务端初体验

用Swift的框架Vapor写服务端初体验

作者: Arclin | 来源:发表于2017-06-21 15:03 被阅读230次

    总而言之就是用Swift写服务端接口

    安装Vapor

    curl -sL toolbox.vapor.sh | bash

    创建项目

    vapor new Hello --template=light

    --template=light 意思是使用light-template模板,如果不指定模板的话默认使用base-template模板

    下载依赖并编译项目

    vapor build

    50多M的包,好久...

    配置服务器

    创建Config文件夹,新建servers.json文件, 指定host地址和端口号

    {
      "http": {
        "host": "0.0.0.0",
        "port": 8000
      }
    }
    

    0.0.0.0 和 127.0.0.1 都表示本机,使用 0.0.0.0 的原因是,一个机器可能有多个 IP 地址,0.0.0.0 表示监听每个 IP 8000 端口收到的请求。

    127.0.0.1 则表示只接受本机发给本机的请求,从网络上其他电脑发过来的请求,不论是请求的哪个 IP,都是不被处理的。

    打包成一个XCode项目

    vapor xcode -y 这样子打包之后就会自动打开了

    启动服务器

    vapor run 或者在XCodey运行

    看到了控制台输出了

    No command supplied, defaulting to serve...
    No preparations.
    Server 'http' starting at 0.0.0.0:8000
    

    就可以了

    如果说什么Can not bind to xxxx 就应该是端口占用的问题,可以用lsof -i tcp:端口号kill -9 进程号解决这个问题

    如果你在浏览器输入http://localhost:8000可以看到以下信息就证明服务器启动成功了

    Request  
    - GET / HTTP/1.1
    - Headers:
        Host: 0.0.0.0:8000
        Upgrade-Insecure-Requests: 1
        Connection: keep-alive
        User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
        Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2
        Accept-Encoding: gzip, deflate, sdch
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    - Body:
    

    会出现这串东西是因为他执行了Sources/App/main.swift的内容,把请求体返回回来.

    修改Sources/App/main.swift

    把文件改成这样子

    import Vapor
    
    let drop = Droplet()
    
    drop.get { _ in
        return try JSON(node: [
                "message":"Hello Vapor"
            ])
    }
    
    drop.get("Hello","There") { request in
        return try JSON (node:[
                "message":"Hello There"
            ])
    }
    
    drop.get("TEST") { request in
        return try JSON (node:[
                "message":"Hello Test"
            ])
    }
    
    drop.run()
    
    

    然后我们使用Postman测试一下三个地址
    http://localhost:8000/

    WX20170316-105233@2x.png

    http://localhost:8000/Hello/There

    WX20170316-105315@2x.png

    http://localhost:8000/TEST

    WX20170316-105336@2x.png

    接下来试试接受参数并返回

    继续在drop.run() 上面补充

    drop.post("post") { request in
        guard let name = request.data["name"]?.string else {
            throw Abort.badRequest
        }
        return try JSON(node: [
            "name": "Hello \(name)!"
            ])
    }
    

    guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

    判断如果没有接收到'name'参数的话就会抛出异常Invalid request,有的话就返回Hello + 参数值 + !

    测试一下

    WX20170316-110133@2x.png

    为什么要用Swift写服务器?

    额,看了一下资料,也没发现有谁说这东西有什么特别突出的优点,不过没试过,觉得挺新鲜,就试试嘛.

    学习资料 :
    服务端 Swift - Vapor 篇 (一)
    用 Swift 的框架 Vapor 写服务器这事儿怎么样?

    相关文章

      网友评论

        本文标题:用Swift的框架Vapor写服务端初体验

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