近日,在Medium上看到Vapor出了2.0版本,并且出了新的文檔,新的網(wǎng)站。于是忍不住試了一下,并且這次打算不在本地測(cè)試,想在Ubuntu系統(tǒng)上嘗試。
Intro
通過學(xué)習(xí)這篇文章,你將學(xué)習(xí)到:
- 在阿里云和騰訊云上搭載Ubuntu云服務(wù)器
- 在Ubuntu上配置Vapor2.0以及Swift3.1運(yùn)行環(huán)境
- 了解編譯Vapor2.0工程的速度
- 掌握如何編寫簡(jiǎn)單的JSON數(shù)據(jù)返回API
Get Start
阿里云、騰訊云搭載Ubuntu服務(wù)器端系統(tǒng)
因?yàn)榻^大部分公司是不可能會(huì)用蘋果系統(tǒng)來作服務(wù)器的,考慮到實(shí)用性,這次使用云服務(wù)器來運(yùn)行我們的服務(wù)端Swift代碼。剛好作為學(xué)生能夠以廉價(jià)買阿里云和騰訊云服務(wù)器,所以下手測(cè)試了兩家云端服務(wù)器。
騰訊云服務(wù)器CVM
阿里云服務(wù)器ECS
由于Swift暫時(shí)只支持Ubuntu運(yùn)行環(huán)境,所以云服務(wù)器系統(tǒng)我們選擇安裝Ubuntu16.04 64位版本,請(qǐng)確定安裝正確的系統(tǒng)。
性能比較
對(duì)比兩種服務(wù)器,阿里云的速度慢騰訊云可不止一兩倍,而且,搞了很久,阿里云打開不了80窗口,這樣我們的服務(wù)端代碼就起不了作用了,親測(cè)騰訊云成功運(yùn)行。
配置Vapor2.0以及Swift3.1運(yùn)行環(huán)境
通過ssh來登錄我們的服務(wù)器
ssh [name]@公網(wǎng)iP
然后輸入密碼即可登錄。name
為管理員名,或者你也可以在騰訊云管理中心遠(yuǎn)程連接服務(wù)器。
運(yùn)行腳本
eval "$(curl -sL https://apt.vapor.sh)"
安裝Vapor
sudo apt-get install swift vapor
安裝Vapor2.0。
需要注意的是,這兩行指令已經(jīng)默認(rèn)給我們配置了Swift3.1的環(huán)境,我們不需要手動(dòng)下載Swift3.1,非常方便。
最后
通過一行指令再次確認(rèn)Vapor2.0是否安裝成功
eval "$(curl -sL check.vapor.sh)"
如果安裝成功,你會(huì)看到以下的效果
新建一個(gè)Vapor工程
通過一行命令新建一個(gè)工程
vapor new HelloWorld
第一次新建的時(shí)候,你可能會(huì)看到
是因?yàn)槲覀冞€沒有設(shè)置我們的Git郵箱和名稱,通過執(zhí)行以下兩行命令即可修復(fù)錯(cuò)誤。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
這時(shí)候我們可以重新新建一個(gè)工程
vapor new [name]
cd
到我們的工程文件中,運(yùn)行vapor build
然后就看云服務(wù)器的造詣了,在前面的文章里面,我寫過一篇在蘋果系統(tǒng)本地測(cè)試我們的Vapor,當(dāng)我運(yùn)行
vapor build
大約都要等個(gè)5到10分鐘。在阿里云測(cè)試我們的Vapor時(shí),我大約也要等10來分鐘,但是騰訊云我測(cè)試大約要3分鐘,速度明顯差異。
成功編譯
Vapor目錄結(jié)構(gòu)
Hello
├── Config
│ ├── app.json
│ ├── crypto.json
│ ├── droplet.json
│ ├── fluent.json
│ └── server.json
├── Package.pins
├── Package.swift
├── Public
├── README.md
├── Sources
│ ├── App
│ │ ├── Config+Setup.swift
│ │ ├── Controllers
│ │ │ └── PostController.swift
│ │ ├── Droplet+Setup.swift
│ │ ├── Models
│ │ │ └── Post.swift
│ │ └── Routes.swift
│ └── Run
│ └── main.swift
├── Tests
│ ├── AppTests
│ │ ├── PostControllerTests.swift
│ │ ├── RouteTests.swift
│ │ └── Utilities.swift
│ └── LinuxMain.swift
├── circle.yml
└── license
需要注意的是,Vapor2.0的文件結(jié)構(gòu)和Vapor1稍有差別,確實(shí)是Less Code,More Power.
cd Sources/App
cd 到App目錄下
運(yùn)行vim Routes.swift
查看該文件代碼,我們可以發(fā)現(xiàn)
import Vapor
final class Routes: RouteCollection {
func build(_ builder: RouteBuilder) throws {
builder.get("hello") { req in
var json = JSON()
try json.set("hello", "world")
return json
}
builder.get("plaintext") { req in
return "Hello, world!"
}
// response to requests to /info domain
// with a description of the request
builder.get("info") { req in
return req.description
}
builder.get("*") { req in return req.description }
try builder.resource("posts", PostController.self)
}
}
/// Since Routes doesn't depend on anything
/// to be initialized, we can conform it to EmptyInitializable
///
/// This will allow it to be passed by type.
extension Routes: EmptyInitializable { }
對(duì)比上個(gè)版本,確實(shí)是簡(jiǎn)潔了很多。
補(bǔ)充:退出vim Routes.swift
命令可以按Shift健+Q
再輸入wq!
退出來。
最后,Run Server
先cd回工程根目錄下,并執(zhí)行
vapor run serve
測(cè)試API數(shù)據(jù)返回
在瀏覽器上輸入
[你的云服務(wù)器公網(wǎng)IP]:8080/hello
Vapor 2:Less code, more power.
Vapor2添加了很多新的庫(kù)
相比Vapor1.5,快速大概3倍,而且比PHP,Ruby快近乎100倍
寫在最后
本次是Vapor2.0的開篇,大家可以上Vapor2.0新文檔查看新版介紹。往后會(huì)詳細(xì)講Vapor2的功能介紹和應(yīng)用,喜歡請(qǐng)給紅心,也是對(duì)我的鼓勵(lì)。