简介
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
- 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 开发部件,比如路由、授权认证、模版引擎、中间件、数据库ORM、JSON解析、Web sockets… 足以拿来让我们应付普通的 web 设计,让我们只需要更多的关心业务逻辑便可快速开发出自己的网站。该系列后面的文章会详细深入对每个部件进行探究。
从 ToolBox 开始
安装
Mac 用户推荐用 Homebrew 安装 vapor toolBox,toolBox 也是 Swift 写的,仓库在这里。
# install Vapor ToolBox@H_301_80@
brew install vapor/tap/toolBox
第一次安装的时候遇到问题,卡在 unset CC; swift build -c release
很久不动,后来又可以了,估计还是因为网络问题,建议大家安装时都开上代理。#11
介绍
vapor toolBox 是封装的一套命令行工具,基础命令如下:
Usage@H_301_80@: vapor <new|build|run|fetch|clean|test|xcode|version|self|heroku|docker>@H_301_80@
- 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@H_301_80@
brew install vapor/tap/toolBox
# Ubuntu@H_301_80@
curl -sL swift.vapor.sh/ubuntu | bash
第一次安装的时候遇到问题,卡在 unset CC; swift build -c release
很久不动,后来又可以了,估计还是因为网络问题,建议大家安装时都开上代理。#11
更多可以参考官方文档页面 install Toolbox
New Project
如果你是 iOS 开发者,这里请暂时先忘掉 Xcode,因为所有环境和开发都能在 Linux 中完成。
vapor new@H_301_80@ Hello
执行完成后大概会看到这样的界面:
Cloning Template [@H_301_80@Done]@H_301_80@
**
**~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@++++~@H_301_80@~@H_301_80@~@H_301_80@**
**~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@++++~@H_301_80@~@H_301_80@~@H_301_80@**
***~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@~@H_301_80@++++~@H_301_80@~@H_301_80@~@H_301_80@***
****~@H_301_80@~@H_301_80@~@H_