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

簡介

Vapor 是一個基於純 Swift 構建出的 Web 開發框架,目前能夠運行在 macOS 和 Ubuntu ,用於構建出漂亮易用的網站或者 API 服務。javascript

官方稱是用的最多的 Swift web 框架,理由是因其在 IBM Swift Package CatalogBETA - Most Essential 排名第一。But 對於一些星星黨並不這麼以爲,Perfect 星星仍是多一些的 ;]。 我的以爲對於初心者朋友們選擇一款主流、優雅、更新活躍的框架學習就行了,沒必要太在乎那些。html

當我第一眼看到 Vapor 的時候最吸引個人是 vapor.codes 這個網站,作的很漂亮,包括文檔頁面風格,很符合個人胃口,域名也頗有個性,都說 vapor 是受 Laravel 啓發,瞭解框架主要部件和一些語法後讓我想起了 Python 的 Flask 框架,包括組件化思想、中間件,想起來都應該很是容易上手即擴展。java

文檔

Vapor 有一份比較完整的文檔在 docs.vapor.codes,你也能夠在 Github 上對文檔提出 issue 和 pr,不過目前看來 exmple 還比較缺乏,稍稍高級一點的 API 或着最佳實踐很難找到,估計也是由於整個這一塊還比較新穎,成熟度不高,用戶也相對較少的緣由,不過相信在 Swift 日趨成熟的狀態下,各個框架也會發展得愈來愈好。特別是在 Server APIs Project 完成以後,相信會有一個大的轉變,對了 Vapor 的核心開發成員 Logan Wright(@LoganWright) 也是Server APIs Project 團隊的一員,因此看好 Vapor 的將來應該是沒有錯的。node

另外推薦一下 Ray Wenderlich 的一系列 Vapor ship教程,每一個視頻都是簡短截說,很是實用,你能夠在 vapor.university 上找到,固然上面還有其餘優秀的視頻教程和文章。linux

組件

  • 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 還不是很好用。git

Vapor 封裝了幾乎常見的全部 web 開發部件,好比路由、受權認證、模版引擎、中間件、數據庫ORM、JSON解析、Web sockets… 足以拿來讓咱們應付普通的 web 設計,讓咱們只須要更多的關心業務邏輯即可快速開發出本身的網站。該系列後面的文章會詳細深刻對每一個部件進行探究。github

從 Toolbox 開始

安裝

Mac 用戶推薦用 Homebrew 安裝 vapor toolbox,toolbox 也是 Swift 寫的,倉庫在這裏web

# install Vapor Toolbox
brew install vapor/tap/toolbox複製代碼

第一次安裝的時候遇到問題,卡在 unset CC; swift build -c release 好久不動,後來又能夠了,估計仍是由於網絡問題,建議你們安裝時都開上代理。#11docker

介紹

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 - 部署到 heroku
  • docker - 部署到 docker

Xcode

咱們可使用 vapor xcode 生成 xcode 項目,而後就能夠直接使用 xcode 進行 web 開發了,編輯源代碼,Command + R 一切仍是那麼熟悉(對於 iOS 開發者來講)。:]

注意:由於這個 .xcodeproj 項目的目錄結構都是 vapor 自動生成的,因此目錄結構有變更咱們能夠再執行一次 vapor xcode 命令從新生成,而且在爲了避免干擾其餘協同人員在 linux 環境下開發,推薦在 .gitignore 中加入這一行 *.xcodeproj 以忽略其進入 git。

Hello, World

前面講了這麼多介紹、環境、工具,這裏主要帶你們跑起來一個 hello,world 項目。

Toolbox

整個流程都會基於 Vapor Toolbox 的命令完成,因此你的第一步應該是裝好這個東西。

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 好久不動,後來又能夠了,估計仍是由於網絡問題,建議你們安裝時都開上代理。#11

更多能夠參考官方文檔頁面 install Toolbox

New Project

若是你是 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 拉取初始工程,目錄結構以下:

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

項目採用 MVC 架構,ModelControllerSource/App 下,同級還有個 main.swift,這就是整個程序的主文件,Resources/Views 裏放的是頁面模版。

main.swift

import Vapor

let drop = Droplet()

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

drop.run()複製代碼

你們感覺一下路由,最終這份代碼將會在瀏覽器中呈現出 「Hello, world.」 這個字符串,這一篇文章暫時並不會說太多代碼,只是讓你們瞭解感覺下 Vapor 開發的整個流程,後面會深刻其中。

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 開發中的 pod install … ;]

Build

拉取完依賴以後就能夠執行 vapor build 開始編譯項目,然而其實 vapor build 也會去 Fetching Dependencies,因此直接執行這個命令也是能夠的。

編譯完成後你會在項目根目錄下發現一個 .build 目錄,這裏面將會存放項目全部源碼編譯後的文件。

若是使用 xcode 只要不更新依賴,直接 Command+B 進行編譯, Command+R 運行。

Run

編譯成功後經過下面這條命令來啓動服務器。

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 關注我,或者給我發郵件 isaced@163.com

相關文章
相關標籤/搜索