Swift Web 開發(fā)之 Vapor - 入門(一)

簡介

Vapor 是一個基于純 Swift 構(gòu)建出的 Web 開發(fā)框架阵幸,目前可以運行在 macOS 和 Ubuntu 虏杰,用于構(gòu)建出漂亮易用的網(wǎng)站或者 API 服務(wù)熄求。

官方稱是用的最多的 Swift web 框架,理由是因其在 IBM Swift Package CatalogBETA - Most Essential 排名第一硝皂。But 對于一些星星黨并不這么覺得,Perfect 星星還是多一些的 ;]寸爆。 個人覺得對于初心者朋友們選擇一款主流替废、優(yōu)雅兴革、更新活躍的框架學(xué)習(xí)就好了绎晃,不必太在意那些。

當我第一眼看到 Vapor 的時候最吸引我的是 vapor.codes 這個網(wǎng)站杂曲,做的很漂亮庶艾,包括文檔頁面風(fēng)格,很符合我的胃口擎勘,域名也很有個性咱揍,都說 vapor 是受 Laravel 啟發(fā),了解框架主要部件和一些語法后讓我想起了 Python 的 Flask 框架棚饵,包括組件化思想煤裙、中間件,想起來都應(yīng)該非常容易上手即擴展噪漾。

文檔

Vapor 有一份比較完整的文檔在 docs.vapor.codes硼砰,你也可以在 Github 上對文檔提出 issue 和 pr,不過目前看來 exmple 還比較缺少欣硼,稍稍高級一點的 API 或著最佳實踐很難找到夺刑,估計也是因為整個這一塊還比較新穎,成熟度不高分别,用戶也相對較少的原因,不過相信在 Swift 日趨成熟的狀態(tài)下存淫,各個框架也會發(fā)展得越來越好耘斩。特別是在 Server APIs Project 完成之后,相信會有一個大的轉(zhuǎn)變桅咆,對了 Vapor 的核心開發(fā)成員 Logan Wright(@LoganWright) 也是Server APIs Project 團隊的一員括授,所以看好 Vapor 的未來應(yīng)該是沒有錯的。

另外推薦一下 Ray Wenderlich 的一系列 Vapor ship教程,每個視頻都是簡短截說荚虚,非常實用薛夜,你可以在 vapor.university 上找到,當然上面還有其他優(yōu)秀的視頻教程和文章版述。

組件

  • Vapor
    • Auth
    • Sessions
    • Cookies
    • Routing
  • Vapor Toolbox
  • Fluent
  • Engine
    • HTTP
    • URI
    • WebSockets
    • SMTP
  • Leaf
  • JSON
  • Console
  • TLS
  • Crypto
  • Node
  • Socks

Vapor 使用 Swift Package Manager 做依賴和包管理梯澜,不過以我個人目前的使用感受來看 Swift Package Manager 還不是很好用。

Vapor 封裝了幾乎常見的所有 web 開發(fā)部件渴析,比如路由晚伙、授權(quán)認證、模版引擎俭茧、中間件咆疗、數(shù)據(jù)庫ORM、JSON解析母债、Web sockets… 足以拿來讓我們應(yīng)付普通的 web 設(shè)計午磁,讓我們只需要更多的關(guān)心業(yè)務(wù)邏輯便可快速開發(fā)出自己的網(wǎng)站。該系列后面的文章會詳細深入對每個部件進行探究毡们。

從 Toolbox 開始

安裝

Mac 用戶推薦用 Homebrew 安裝 vapor toolbox迅皇,toolbox 也是 Swift 寫的,倉庫在這里漏隐。

# install Vapor Toolbox
brew install vapor/tap/toolbox

第一次安裝的時候遇到問題喧半,卡在 unset CC; swift build -c release 很久不動,后來又可以了青责,估計還是因為網(wǎng)絡(luò)問題挺据,建議大家安裝時都開上代理。#11

介紹

vapor toolbox 是封裝的一套命令行工具脖隶,基礎(chǔ)命令如下:

Usage: vapor <new|build|run|fetch|clean|test|xcode|version|self|heroku|docker>
  • new - 新建項目
  • build - 編譯(內(nèi)部會執(zhí)行 swift build
  • run - 運行項目
  • fetch - 拉取定義在 Package.swift 中的依賴
  • clean - 清除緩存
  • test - 執(zhí)行測試
  • xcode - 生成 .xcodeproj 用于使用 xcode 進行開發(fā)
  • version - 查看 vapor toolbox 版本號
  • self - vapor self <install|update> 用來自更新
  • heroku - 部署到 heroku
  • docker - 部署到 docker

Xcode

我們可以使用 vapor xcode 生成 xcode 項目扁耐,然后就可以直接使用 xcode 進行 web 開發(fā)了,編輯源代碼产阱,Command + R 一切還是那么熟悉(對于 iOS 開發(fā)者來說)婉称。:]

注意:因為這個 .xcodeproj 項目的目錄結(jié)構(gòu)都是 vapor 自動生成的,所以目錄結(jié)構(gòu)有變動我們可以再執(zhí)行一次 vapor xcode 命令重新生成构蹬,并且在為了不干擾其他協(xié)同人員在 linux 環(huán)境下開發(fā)王暗,推薦在 .gitignore 中加入這一行 *.xcodeproj 以忽略其進入 git。

Hello, World

前面講了這么多介紹庄敛、環(huán)境俗壹、工具,這里主要帶大家跑起來一個 hello,world 項目藻烤。

Toolbox

整個流程都會基于 Vapor Toolbox 的命令完成绷雏,所以你的第一步應(yīng)該是裝好這個東西头滔。

Mac 用戶推薦用 Homebrew 安裝 vapor toolbox,toolbox 也是 Swift 寫的涎显,倉庫在 Github坤检。

# macOS
brew install vapor/tap/toolbox

# Ubuntu
curl -sL swift.vapor.sh/ubuntu | bash

第一次安裝的時候遇到問題,卡在 unset CC; swift build -c release 很久不動期吓,后來又可以了早歇,估計還是因為網(wǎng)絡(luò)問題,建議大家安裝時都開上代理膘婶。#11

更多可以參考官方文檔頁面 install Toolbox

New Project

如果你是 iOS 開發(fā)者缺前,這里請暫時先忘掉 Xcode,因為所有環(huán)境和開發(fā)都能在 Linux 中完成悬襟。

vapor new Hello

執(zhí)行完成后大概會看到這樣的界面:

Cloning Template [Done]

                                      **
                                    **~~**
                                  **~~~~~~**
                                **~~~~~~~~~~**
                              **~~~~~~~~~~~~~~**
                            **~~~~~~~~~~~~~~~~~~**
                          **~~~~~~~~~~~~~~~~~~~~~~**
                         **~~~~~~~~~~~~~~~~~~~~~~~~**
                        **~~~~~~~~~~~~~~~~~~~~~~~~~~**
                       **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                       **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                       **~~~~~~~~~~~~~~~~~~~~~++++~~~**
                        **~~~~~~~~~~~~~~~~~~~++++~~~**
                         ***~~~~~~~~~~~~~~~++++~~~***
                           ****~~~~~~~~~~++++~~****
                              *****~~~~~~~~~*****
                                 *************
                        
                        _       __    ___   ___   ___
                       \ \  /  / /\  | |_) / / \ | |_)
                        \_\/  /_/--\ |_|   \_\_/ |_| \
                          a web framework for Swift

                      Project "Hello" has been created.
               Type `cd Hello` to enter the project directory.
                                    Enjoy!

vapor new 命令將會從 vapor/basic-template 拉取初始工程衅码,目錄結(jié)構(gòu)如下:

.
├── Config
│   └── production
├── Localization
├── Public
│   ├── images
│   └── styles
├── Resources
│   └── Views
└── Sources
    └── App
        ├── Controllers
        └── Models

項目采用 MVC 架構(gòu),ModelControllerSource/App 下脊岳,同級還有個 main.swift逝段,這就是整個程序的主文件,Resources/Views 里放的是頁面模版割捅。

main.swift

import Vapor

let drop = Droplet()

drop.get("hello") { req in
    return "Hello, world."
}

drop.run()

大家感受一下路由奶躯,最終這份代碼將會在瀏覽器中呈現(xiàn)出 “Hello, world.” 這個字符串,這一篇文章暫時并不會說太多代碼亿驾,只是讓大家了解感受下 Vapor 開發(fā)的整個流程嘹黔,后面會深入其中。

Fetch

編譯之前需要拉取項目所有的第三方庫莫瞬,也就是依賴包儡蔓,Vapor 使用 Swift Package Manager 來管理包,使用 toolbox 中的 vapor fetch 命令進行拉取依賴疼邀,拉取到本地后后所有的包源碼將會在 Packages 目錄中喂江,如下:

CLibreSSL-1.0.0     Fluent-1.1.0        Node-1.0.1          Turnstile-1.0.3
CMySQL-1.0.0        FluentMySQL-1.0.1   PathIndexable-1.0.0 Vapor-1.2.0
Console-1.0.1       JSON-1.0.1          Polymorphic-1.0.1   VaporMySQL-1.1.0
Core-1.0.0          Jay-1.0.0           Routing-1.0.1
Crypto-1.0.1        Leaf-1.0.3          Socks-1.2.0
Engine-1.3.0        MySQL-1.0.2         TLS-1.1.0

這一步就像是 iOS 開發(fā)中的 pod install … ;]

Build

拉取完依賴之后就可以執(zhí)行 vapor build 開始編譯項目,然而其實 vapor build 也會去 Fetching Dependencies旁振,所以直接執(zhí)行這個命令也是可以的获询。

編譯完成后你會在項目根目錄下發(fā)現(xiàn)一個 .build 目錄,這里面將會存放項目所有源碼編譯后的文件拐袜。

如果使用 xcode 只要不更新依賴吉嚣,直接 Command+B 進行編譯, Command+R 運行蹬铺。

Run

編譯成功后通過下面這條命令來啟動服務(wù)器尝哆。

vapor run serve

如果看到 Server starting... 的字樣,那就可以通過瀏覽器訪問 http://localhost:8080 進行訪問了丛塌。

部署

Vapor 支持任何能運行 Swift 環(huán)境的地方较解,輕松搭配 Nginx 等通用服務(wù)器程序進行部署。比如 Digital Ocean赴邻、Docker印衔、Heroku、AWS 等等姥敛,甚至還支持一鍵部署到 Heroku奸焙,Heroku 為個人用戶提供了一個免費沙盒(512 MB RAM │ 1 web/1 worker),只是會在閑置30分鐘后自動睡眠彤敛,如果你想嘗試与帆,Just do it,非常簡單墨榄。

社區(qū)

捐贈

作為一個非營利開源項目組織玄糟,他們非常愿意接受資金贊助以保持項目積極發(fā)展,所以如果你喜歡這個項目并想支持 Vapor袄秩,這將會是一個很好的方式阵翎。

Vapor 在 OpenCollective 開通了捐贈頁面,在其 Github 主頁可以找到相關(guān)鏈接之剧,

OpenCollective 是一個用于開源社區(qū)募集資金的平臺郭卫,主張財務(wù)透明,可在其頁面上看到任何人的捐贈記錄背稼。

個人覺得支持一個項目的更好方式是為其“添磚加瓦”贰军,把你更多的靈感和代碼注入到項目里。

推薦閱讀

后記

【Swift Web 開發(fā)之 Vapor】第一篇就這樣了蟹肘,Vapor 內(nèi)容很多词疼,“入門”旨在爭取看完能夠搭建好環(huán)境和跑起來示例程序并對這個框架有個初步認識就可以了,后續(xù)我會繼續(xù)分享 Vapor 相關(guān)的其他組件和使用經(jīng)驗疆前。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寒跳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竹椒,更是在濱河造成了極大的恐慌童太,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胸完,死亡現(xiàn)場離奇詭異书释,居然都是意外死亡,警方通過查閱死者的電腦和手機赊窥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門爆惧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锨能,你說我怎么就攤上這事扯再∩衷牛” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵熄阻,是天一觀的道長斋竞。 經(jīng)常有香客問我,道長秃殉,這世上最難降的妖魔是什么坝初? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮钾军,結(jié)果婚禮上鳄袍,老公的妹妹穿的比我還像新娘。我一直安慰自己吏恭,他們只是感情好拗小,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砸泛,像睡著了一般十籍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唇礁,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天勾栗,我揣著相機與錄音,去河邊找鬼盏筐。 笑死围俘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的琢融。 我是一名探鬼主播界牡,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼漾抬!你這毒婦竟也來了宿亡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤纳令,失蹤者是張志新(化名)和其女友劉穎挽荠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平绩,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡圈匆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捏雌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跃赚。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖性湿,靈堂內(nèi)的尸體忽然破棺而出纬傲,到底是詐尸還是另有隱情满败,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布叹括,位于F島的核電站葫录,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏领猾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一骇扇、第九天 我趴在偏房一處隱蔽的房頂上張望摔竿。 院中可真熱鬧,春花似錦少孝、人聲如沸继低。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁翁。三九已至,卻和暖如春婿脸,著一層夾襖步出監(jiān)牢的瞬間粱胜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工狐树, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焙压,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓抑钟,卻偏偏與公主長得像涯曲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子在塔,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容