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