之前的文章
- 使用Swift4+Vapor写后端-初体验
- 使用Swift4+Vapor写后端-部署heroku服务器
- 使用Swift4+Vapor写后端-Droplet和Route
- 使用Swift4+Vapor写后端-示例&套路
- 使用Swift4+Vapor写后端-总结
以上使用的是vapor2
前言
由于 Apple 发布了事件驱动的非阻塞网络框架 SwiftNIO 的缘故,Vapor 3 以迅雷不及掩耳盗铃当之势将其接入,导致 Vapor 2 和 Vapor 3 的语法差异很大。
创建项目
我们使用vapor new helloVapor
创建一个名为helloVapor的空项目,vapor默认创建的模板项目中已经为我们写了一些初始化代码。项目结构如下:
.
├── Public
├── Sources
│ ├── App
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── boot.swift
│ │ ├── configure.swift
│ │ └── routes.swift
│ └── Run
│ └── main.swift
├── Tests
│ └── AppTests
└── Package.swift
App
这是应用程序中最重要的文件夹,它是所有应用程序逻辑的所在。
Controllers
控制器是将应用逻辑分组在一起的好方式。大多数控制器具有许多功能,接受请求并返回某种响应。
Models
模型文件夹用来存放模型文件。
boot.swift
此文件包含一个函数,该函数将在应用程序启动后调用。我们可以在访问这里的应用程序,也可以使用该应用程序来创建可能需要的任何服务。
configure.swift
此文件包含一个函数,该函数接收应用程序的配置、环境和服务作为输入参数。在这里来改变应用的配置或注册服务。
routes.swift
在这里创建路由。
项目初体验
与vapor2中的Droplet
不同,vapor3使用Application
作为一个服务容器,它负责注册路由,启动服务器,中间件 (middleware)等等。如示例代码app.swift
中:
public func app(_ env: Environment) throws -> Application {
var config = Config.default()
var env = env
var services = Services.default()
try configure(&config, &env, &services)
let app = try Application(config: config, environment: env, services: services)
try boot(app)
return app
}
main.swift
中调用了该方法初始化了一个Application,然后调用其run
方法启动服务。
其中try configure(&config, &env, &services)
这里调用了configure.swift
文件中的public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws
方法,用来注册服务、路由、中间层,并配置数据库和模型。具体内容见项目的示例代码,这里不再赘述。
运行
使用vapor run
或者vapor xcode
创建xcode项目并选择run
target来运行项目。
控制台打印 Server starting on http://localhost:8080
项目运行成功,然后我们调用一下默认的接口,在浏览器中输入http://localhost:8080/hello
,会看到返回的字符串:Hello, world!
接下来可以尝试自己写一些简单的get/post请求。