Swift Web 开发之 Vapor - 入门(一)

简介

Vapor 是一个基于纯 Swift 构建出的 Web 开发框架,目前能够运行在 macOS 和 Ubuntu ,用于构建出漂亮易用的网站或者 API 服务。html

官方称是用的最多的 Swift web 框架,理由是因其在 IBM Swift Package CatalogBETA - Most Essential 排名第一。But 对于一些星星党并不这么以为,Perfect 星星仍是多一些的 ;]。 我的以为对于初心者朋友们选择一款主流、优雅、更新活跃的框架学习就行了,没必要太在乎那些。node

当我第一眼看到 Vapor 的时候最吸引个人是 vapor.codes 这个网站,作的很漂亮,包括文档页面风格,很符合个人胃口,域名也颇有个性,都说 vapor 是受 Laravel 启发,了解框架主要部件和一些语法后让我想起了 Python 的 Flask 框架,包括组件化思想、中间件,想起来都应该很是容易上手即扩展。linux

文档

Vapor 有一份比较完整的文档在 docs.vapor.codes,你也能够在 Github 上对文档提出 issue 和 pr,不过目前看来 exmple 还比较缺乏,稍稍高级一点的 API 或着最佳实践很难找到,估计也是由于整个这一块还比较新颖,成熟度不高,用户也相对较少的缘由,不过相信在 Swift 日趋成熟的状态下,各个框架也会发展得愈来愈好。特别是在 Server APIs Project 完成以后,相信会有一个大的转变,对了 Vapor 的核心开发成员 Logan Wright(@LoganWright) 也是Server APIs Project 团队的一员,因此看好 Vapor 的将来应该是没有错的。git

另外推荐一下 Ray Wenderlich 的一系列 Vapor ship教程,每一个视频都是简短截说,很是实用,你能够在 vapor.university 上找到,固然上面还有其余优秀的视频教程和文章。github

组件

  • Vaporweb

    • Authdocker

    • Sessions数据库

    • Cookiesubuntu

    • Routingswift

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

相关文章
相关标签/搜索