之前的文章
- 使用Swift4+Vapor寫后端-初體驗
- 使用Swift4+Vapor寫后端-部署heroku服務(wù)器
- 使用Swift4+Vapor寫后端-Droplet和Route
- 使用Swift4+Vapor寫后端-示例&套路
- 使用Swift4+Vapor寫后端-總結(jié)
以上使用的是vapor2
前言
由于 Apple 發(fā)布了事件驅(qū)動的非阻塞網(wǎng)絡(luò)框架 SwiftNIO 的緣故冷离,Vapor 3 以迅雷不及掩耳盜鈴當(dāng)之勢將其接入明也,導(dǎo)致 Vapor 2 和 Vapor 3 的語法差異很大嫂沉。
創(chuàng)建項目
我們使用vapor new helloVapor
創(chuàng)建一個名為helloVapor的空項目方库,vapor默認(rèn)創(chuàng)建的模板項目中已經(jīng)為我們寫了一些初始化代碼奴璃。項目結(jié)構(gòu)如下:
.
├── Public
├── Sources
│ ├── App
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── boot.swift
│ │ ├── configure.swift
│ │ └── routes.swift
│ └── Run
│ └── main.swift
├── Tests
│ └── AppTests
└── Package.swift
App
這是應(yīng)用程序中最重要的文件夾腺晾,它是所有應(yīng)用程序邏輯的所在居暖。
Controllers
控制器是將應(yīng)用邏輯分組在一起的好方式米诉。大多數(shù)控制器具有許多功能币狠,接受請求并返回某種響應(yīng)游两。
Models
模型文件夾用來存放模型文件。
boot.swift
此文件包含一個函數(shù)漩绵,該函數(shù)將在應(yīng)用程序啟動后調(diào)用贱案。我們可以在訪問這里的應(yīng)用程序,也可以使用該應(yīng)用程序來創(chuàng)建可能需要的任何服務(wù)止吐。
configure.swift
此文件包含一個函數(shù)宝踪,該函數(shù)接收應(yīng)用程序的配置、環(huán)境和服務(wù)作為輸入?yún)?shù)碍扔。在這里來改變應(yīng)用的配置或注冊服務(wù)瘩燥。
routes.swift
在這里創(chuàng)建路由。
項目初體驗
與vapor2中的Droplet
不同不同,vapor3使用Application
作為一個服務(wù)容器厉膀,它負(fù)責(zé)注冊路由,啟動服務(wù)器二拐,中間件 (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
中調(diào)用了該方法初始化了一個Application,然后調(diào)用其run
方法啟動服務(wù)卓鹿。
其中try configure(&config, &env, &services)
這里調(diào)用了configure.swift
文件中的public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws
方法菱魔,用來注冊服務(wù)留荔、路由吟孙、中間層澜倦,并配置數(shù)據(jù)庫和模型。具體內(nèi)容見項目的示例代碼杰妓,這里不再贅述藻治。
運(yùn)行
使用vapor run
或者vapor xcode
創(chuàng)建xcode項目并選擇run
target來運(yùn)行項目。
控制臺打印 Server starting on http://localhost:8080
項目運(yùn)行成功巷挥,然后我們調(diào)用一下默認(rèn)的接口桩卵,在瀏覽器中輸入http://localhost:8080/hello
,會看到返回的字符串:Hello, world!
接下來可以嘗試自己寫一些簡單的get/post請求倍宾。