
Vapor 是一個(gè)基于純 Swift 構(gòu)建出的 Web 開(kāi)發(fā)框架,目前可以運(yùn)行在 macOS 和 Ubuntu ,用于構(gòu)建出漂亮易用的網(wǎng)站或者 API 服務(wù)。
官方稱是用的最多的 Swift web 框架,理由是因其在 IBM Swift Package CatalogBETA - Most Essential 排名第一。But 對(duì)于一些星星黨并不這么覺(jué)得,Perfect 星星還是多一些的 ;]。 個(gè)人覺(jué)得對(duì)于初心者朋友們選擇一款主流、優(yōu)雅、更新活躍的框架學(xué)習(xí)就好了,不必太在意那些。
當(dāng)我第一眼看到 Vapor 的時(shí)候最吸引我的是 vapor.codes 這個(gè)網(wǎng)站,做的很漂亮,包括文檔頁(yè)面風(fēng)格,很符合我的胃口,域名也很有個(gè)性,都說(shuō) vapor 是受 Laravel 啟發(fā),了解框架主要部件和一些語(yǔ)法后讓我想起了 Python 的 Flask 框架,包括組件化思想、中間件,想起來(lái)都應(yīng)該非常容易上手即擴(kuò)展。
Vapor 有一份比較完整的文檔在 docs.vapor.codes,你也可以在 Github 上對(duì)文檔提出 issue 和 PR,不過(guò)目前看來(lái) exmple 還比較缺少,稍稍高級(jí)一點(diǎn)的 API 或著最佳實(shí)踐很難找到,估計(jì)也是因?yàn)檎麄€(gè)這一塊還比較新穎,成熟度不高,用戶也相對(duì)較少的原因,不過(guò)相信在 Swift 日趨成熟的狀態(tài)下,各個(gè)框架也會(huì)發(fā)展得越來(lái)越好。特別是在 Server APIs Project 完成之后,相信會(huì)有一個(gè)大的轉(zhuǎn)變,對(duì)了 Vapor 的核心開(kāi)發(fā)成員 Logan Wright(@LoganWright) 也是Server APIs Project 團(tuán)隊(duì)的一員,所以看好 Vapor 的未來(lái)應(yīng)該是沒(méi)有錯(cuò)的。
另外推薦一下 Ray Wenderlich 的一系列 Vapor ship教程,每個(gè)視頻都是簡(jiǎn)短截說(shuō),非常實(shí)用,你可以在 vapor.university 上找到,當(dāng)然上面還有其他優(yōu)秀的視頻教程和文章。
Vapor 使用 Swift Package Manager 做依賴和包管理,不過(guò)以我個(gè)人目前的使用感受來(lái)看 Swift Package Manager 還不是很好用。
Vapor 封裝了幾乎常見(jiàn)的所有 web 開(kāi)發(fā)部件,比如路由、授權(quán)認(rèn)證、模版引擎、中間件、數(shù)據(jù)庫(kù)ORM、JSON解析、Web sockets… 足以拿來(lái)讓我們應(yīng)付普通的 web 設(shè)計(jì),讓我們只需要更多的關(guān)心業(yè)務(wù)邏輯便可快速開(kāi)發(fā)出自己的網(wǎng)站。該系列后面的文章會(huì)詳細(xì)深入對(duì)每個(gè)部件進(jìn)行探究。
Mac 用戶推薦用 Homebrew 安裝 vapor toolbox,toolbox 也是 Swift 寫(xiě)的,倉(cāng)庫(kù)在這里。
# install Vapor Toolboxbrew install vapor/tap/toolbox第一次安裝的時(shí)候遇到問(wèn)題,卡在 unset CC; swift build -c release 很久不動(dòng),后來(lái)又可以了,估計(jì)還是因?yàn)榫W(wǎng)絡(luò)問(wèn)題,建議大家安裝時(shí)都開(kāi)上代理。#11
vapor toolbox 是封裝的一套命令行工具,基礎(chǔ)命令如下:
Usage: vapor <new|build|run|fetch|clean|test|xcode|version|self|heroku|docker>new - 新建項(xiàng)目build - 編譯(內(nèi)部會(huì)執(zhí)行swift build)run - 運(yùn)行項(xiàng)目fetch - 拉取定義在 Package.swift 中的依賴clean - 清除緩存test - 執(zhí)行測(cè)試xcode - 生成 .xcodeproj 用于使用 xcode 進(jìn)行開(kāi)發(fā)version - 查看 vapor toolbox 版本號(hào)self - vapor self <install|update> 用來(lái)自更新heroku - 部署到 herokudocker - 部署到 docker我們可以使用 vapor xcode 生成 xcode 項(xiàng)目,然后就可以直接使用 xcode 進(jìn)行 web 開(kāi)發(fā)了,編輯源代碼,Command + R 一切還是那么熟悉(對(duì)于 iOS 開(kāi)發(fā)者來(lái)說(shuō))。:]
注意:因?yàn)檫@個(gè) .xcodeproj 項(xiàng)目的目錄結(jié)構(gòu)都是 vapor 自動(dòng)生成的,所以目錄結(jié)構(gòu)有變動(dòng)我們可以再執(zhí)行一次 vapor xcode 命令重新生成,并且在為了不干擾其他協(xié)同人員在 linux 環(huán)境下開(kāi)發(fā),推薦在 .gitignore 中加入這一行 *.xcodeproj 以忽略其進(jìn)入 git。
前面講了這么多介紹、環(huán)境、工具,這里主要帶大家跑起來(lái)一個(gè) hello,world 項(xiàng)目。
整個(gè)流程都會(huì)基于 Vapor Toolbox 的命令完成,所以你的第一步應(yīng)該是裝好這個(gè)東西。
Mac 用戶推薦用 Homebrew 安裝 vapor toolbox,toolbox 也是 Swift 寫(xiě)的,倉(cāng)庫(kù)在 Github。
# macOSbrew install vapor/tap/toolbox# Ubuntucurl -sL swift.vapor.sh/ubuntu | bash第一次安裝的時(shí)候遇到問(wèn)題,卡在 unset CC; swift build -c release 很久不動(dòng),后來(lái)又可以了,估計(jì)還是因?yàn)榫W(wǎng)絡(luò)問(wèn)題,建議大家安裝時(shí)都開(kāi)上代理。#11
更多可以參考官方文檔頁(yè)面 install Toolbox
如果你是 iOS 開(kāi)發(fā)者,這里請(qǐng)暫時(shí)先忘掉 Xcode,因?yàn)樗协h(huán)境和開(kāi)發(fā)都能在 Linux 中完成。
vapor new Hello執(zhí)行完成后大概會(huì)看到這樣的界面:
Cloning Template [Done] ** **~~** **~~~~~~** **~~~~~~~~~~** **~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~++++~~~** **~~~~~~~~~~~~~~~~~~~++++~~~** ***~~~~~~~~~~~~~~~++++~~~*** ****~~~~~~~~~~++++~~**** *****~~~~~~~~~***** ************* _ __ ___ ___ ___ / / / / // | |_) / / / | |_) /_// /_/--/ |_| /_/_/ |_| / a web framework for Swift Project "Hello" has been created. Type `cd Hello` to enter the project directory. Enjoy!vapor new 命令將會(huì)從 vapor/basic-template 拉取初始工程,目錄結(jié)構(gòu)如下:
項(xiàng)目采用 MVC 架構(gòu),Model 和 Controller 在 Source/App 下,同級(jí)還有個(gè) main.swift,這就是整個(gè)程序的主文件,Resources/Views 里放的是頁(yè)面模版。
大家感受一下路由,最終這份代碼將會(huì)在瀏覽器中呈現(xiàn)出 “Hello, world.” 這個(gè)字符串,這一篇文章暫時(shí)并不會(huì)說(shuō)太多代碼,只是讓大家了解感受下 Vapor 開(kāi)發(fā)的整個(gè)流程,后面會(huì)深入其中。
編譯之前需要拉取項(xiàng)目所有的第三方庫(kù),也就是依賴包,Vapor 使用 Swift Package Manager 來(lái)管理包,使用 toolbox 中的 vapor fetch 命令進(jìn)行拉取依賴,拉取到本地后后所有的包源碼將會(huì)在 Packages 目錄中,如下:
這一步就像是 iOS 開(kāi)發(fā)中的 pod install … ;]
拉取完依賴之后就可以執(zhí)行 vapor build 開(kāi)始編譯項(xiàng)目,然而其實(shí) vapor build 也會(huì)去 Fetching Dependencies,所以直接執(zhí)行這個(gè)命令也是可以的。
編譯完成后你會(huì)在項(xiàng)目根目錄下發(fā)現(xiàn)一個(gè) .build 目錄,這里面將會(huì)存放項(xiàng)目所有源碼編譯后的文件。
如果使用 xcode 只要不更新依賴,直接 Command+B 進(jìn)行編譯, Command+R 運(yùn)行。
編譯成功后通過(guò)下面這條命令來(lái)啟動(dòng)服務(wù)器。
vapor run serve如果看到 Server starting... 的字樣,那就可以通過(guò)瀏覽器訪問(wèn) http://localhost:8080 進(jìn)行訪問(wèn)了。
Vapor 支持任何能運(yùn)行 Swift 環(huán)境的地方,輕松搭配 Nginx 等通用服務(wù)器程序進(jìn)行部署。比如 Digital Ocean、Docker、Heroku、AWS 等等,甚至還支持一鍵部署到 Heroku,Heroku 為個(gè)人用戶提供了一個(gè)免費(fèi)沙盒(512 MB RAM │ 1 web/1 worker),只是會(huì)在閑置30分鐘后自動(dòng)睡眠,如果你想嘗試,Just do it,非常簡(jiǎn)單。
作為一個(gè)非營(yíng)利開(kāi)源項(xiàng)目組織,他們非常愿意接受資金贊助以保持項(xiàng)目積極發(fā)展,所以如果你喜歡這個(gè)項(xiàng)目并想支持 Vapor,這將會(huì)是一個(gè)很好的方式。
Vapor 在 OpenCollective 開(kāi)通了捐贈(zèng)頁(yè)面,在其 Github 主頁(yè)可以找到相關(guān)鏈接,
OpenCollective 是一個(gè)用于開(kāi)源社區(qū)募集資金的平臺(tái),主張財(cái)務(wù)透明,可在其頁(yè)面上看到任何人的捐贈(zèng)記錄。
個(gè)人覺(jué)得支持一個(gè)項(xiàng)目的更好方式是為其“添磚加瓦”,把你更多的靈感和代碼注入到項(xiàng)目里。
【Swift Web 開(kāi)發(fā)之 Vapor】第一篇就這樣了,Vapor 內(nèi)容很多,“入門(mén)”旨在爭(zhēng)取看完能夠搭建好環(huán)境和跑起來(lái)示例程序并對(duì)這個(gè)框架有個(gè)初步認(rèn)識(shí)就可以了,后續(xù)我會(huì)繼續(xù)分享 Vapor 相關(guān)的其他組件和使用經(jīng)驗(yàn)。
用了近一個(gè)月的 Vapor,開(kāi)了一個(gè)坑準(zhǔn)備寫(xiě)一個(gè)博客程序 NSPress,類似 Wordpress、Typecho,后面的坑很多,比如插件、模版系統(tǒng)的架構(gòu),也是一次 Swift server-side 的學(xué)習(xí)與嘗試,希望有興趣的朋友可以一起學(xué)習(xí)與交流,你可以在 微博、 Github 關(guān)注我,或者給我發(fā)郵件 isaced@163.com。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注