總而言之就是用Swift寫服務端接口
安裝Vapor
curl -sL toolbox.vapor.sh | bash
創(chuàng)建項目
vapor new Hello --template=light
--template=light
意思是使用light-template
模板,如果不指定模板的話默認使用base-template
模板
下載依賴并編譯項目
vapor build
50多M的包,好久...
配置服務器
創(chuàng)建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 表示監(jiān)聽每個 IP 8000 端口收到的請求勋功。
127.0.0.1 則表示只接受本機發(fā)給本機的請求赚抡,從網絡上其他電腦發(fā)過來的請求板辽,不論是請求的哪個 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:
會出現(xiàn)這串東西是因為他執(zhí)行了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/
http://localhost:8000/Hello/There
http://localhost:8000/TEST
接下來試試接受參數并返回
繼續(xù)在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,但是你可以優(yōu)雅的退出而非崩潰演痒。
判斷如果沒有接收到'name'參數的話就會拋出異常Invalid request
,有的話就返回Hello
+ 參數值 + !
測試一下
為什么要用Swift寫服務器?
額,看了一下資料,也沒發(fā)現(xiàn)有誰說這東西有什么特別突出的優(yōu)點,不過沒試過,覺得挺新鮮,就試試嘛.
學習資料 :
服務端 Swift - Vapor 篇 (一)
用 Swift 的框架 Vapor 寫服務器這事兒怎么樣亲轨?