Quick Start
Installing Swift
好像最新的OSX系统是自带Swift的,不过笔者本机的版本是2.1.1,而Vapor的要求是2.2以上版本,因此还是要来Swift.org官网来更新一波的。 首先需要在这嘎达下载下安装文件,然后进行配置。
OSX
默认的OSX系统上的Swift安装的地址为:/Library/Developer/Toolchains
。 可以使用如下配置来使得可执行文件能够全局通用
$ export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"
Linux
首先需要安装下clang
$ sudo apt-get install clang
如果没有把Swift的工具链安装在系统根目录下,可以使用如下方式来讲Swift可执行命令设置为全局可用:
$ export PATH=/path/to/Swift/usr/bin:"${PATH}"
可以使用--version
参数来检查安装的Swift版本是否正确:
$ swift --version
Apple Swift version 2.2-dev (LLVM ...,Clang ...,Swift ...)
HelloWorld
最简单的基于Vapor的架构就是如下
`
-
Sources/
main.swift
Pakcage.swift
`
其中Package.swift的内容如下:
import PackageDescription let package = Package( name: "VaporApp",dependencies: [ .Package(url: "https://github.com/qutheory/vapor.git",majorVersion: 0),.Package(url: "https://github.com/qutheory/vapor-stencil.git",majorVersion: 0) ] )
而main.swift的内容为:
import Vapor let server = Server() server.run()
使用swift build
进行编译,然后运行.build/debug/VaporApp
即可得到如下输出结果:
Server has started on port 80
Clone
sudo apt-get install git git clone git@github.com:qutheory/vapor-example.git
Compile
cd vapor-example swift build --configuration release
Automatic Startup
如果需要整改网站自启动,则需要将如下配置放置到init目录下,/etc/init/vapor-example.conf
description "Vapor Example" start on startup exec /home/<USERNAME>/vapor-example/.build/release/VaporApp --port=80 --workDir=/home/<USERNAME>/vapor-example
这样已经可以执行自启动了:
sudo start vapor-example
API Overview
Server
如果需要创建一个服务器:
main.swift
import Vapor let server = Server() server.run()
也可以自定义需要启动的端口
server.run(port: 8080)
如果有时候端口不能监听,请确定你的端口是处于开启状态,可以使用apt-get ufw
来进行简单的端口管理。
Routing
Vapor中的路由返回跟Lavarel中非常类似:
main.swift
Route.get("welcome") { request in return "Hello" } //...start server
这样所有关于 http://example.com/welcome
的请求都会返回响应: "Hello"
。
JSON
返回JSON数据
Route.get("version") { request in return ["version": "1.0"] }
所有对于 http://example.com/version
请求的返回都是简单的字典类: {"version": "1.0"}
以及 Content-Type: application/json
.
Views
也可以返回HTML界面
Route.get("/") { request in return View(path: "index.html") }
或者使用Stencil Stencil 模板。index.stencil
<html> <h1>{{ message }}</h1> </html>
Route.get("/") { request in return View(path: "index.stencil",context: ["message": "Hello"]) }
如果添加了 VaporStencil
依赖,只需要将视图文件放置到Resources
目录下即可。
Stencil
如果需要添加 VaporStencil
,将如下依赖添加到 Package.swift
.
Package.swift
.Package(url: "https://github.com/qutheory/vapor-stencil.git",majorVersion: 0)
Then set the StencilRenderer()
on your View.renderers
for whatever file extensions you would like to be rendered as Stencil
templates.
main.swift
import VaporStencil //set the stencil renderer //for all .stencil files View.renderers[".stencil"] = StencilRenderer()