咦? 用Swift写后端? 一开始听到的时候懵逼了一秒,一秒自后想了想感觉也没毛病,那就试试看咯.(没看WWDC的后果)
安装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地址和端口号
1 | { |
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
或者在XCode运行
看到了控制台输出了
1 | No command supplied, defaulting to serve... |
就可以了
如果说什么Can not bind to xxxx
就应该是端口占用的问题,可以用lsof -i tcp:端口号
和 kill -9
端口号解决这个问题
如果你在浏览器输入http://localhost:8000
可以看到以下信息就证明服务器启动成功了
1 | Request |
会出现这串东西是因为他执行了Sources/App/main.swift
的内容,把请求体返回回来.
修改Sources/App/main.swift
把文件改成这样子
1 | import Vapor |
然后我们使用Postman测试一下三个地址
http://localhost:8000/
`http://localhost:8000/Hello/There
http://localhost:8000/TEST
接下来试试接受参数并返回
继续在drop.run()
上面补充
1 | drop.post("post") { request in |
guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。
判断如果没有接收到’name’参数的话就会抛出异常Invalid request,有的话就返回Hello + 参数值 + !
测试一下
部署服务器
Vapor支持Heroku,Ubuntu,Digital Ocean,AWS等等服务器,具体怎么做我还没试过,有时间再去试试看
为什么要用Swift写服务器?
额,看了一下资料,也没发现有谁说这东西有什么特别突出的优点,不过没试过,觉得挺新鲜,就试试嘛.
学习资料 :