Route Collections
路由集合允許將多個(gè)路由和路由組組織在不同的文件或模塊中。
Example
以下是v1
API部分的路由集合示例:
import Vapor
import HTTP
import Routing
class V1Collection: RouteCollection {
typealias Wrapped = HTTP.Responder
func build<B: RouteBuilder where B.Value == Wrapped>(_ builder: B) {
let v1 = builder.grouped("v1")
let users = v1.grouped("users")
let articles = v1.grouped("articles")
users.get { request in
return "Requested all users."
}
articles.get(Article.self) { request, article in
return "Requested \(article.name)"
}
}
}
這個(gè)類可以放在任何文件中,可以將它添加到vapor
或甚至添加到另一個(gè)路由組中。
let v1 = V1Collection()
drop.collection(v1)
然后Droplet
將build(_:)
方法傳遞給路由集合,并添加各種路由。
Breakdown
我們逐一分解路由集合,來(lái)了解它們到底生發(fā)了什么。
typealias Wrapped = HTTP.Responder
這限制了路由集合只添加HTTP響應(yīng)。雖然底層路由器能夠路由任何類型,但Vapor只針對(duì)HTTP響應(yīng)者。如果在vapor
要使用這個(gè)路由集合,首先它的包裹類型需要匹配。
func build<B: RouteBuilder where B.Value == Wrapped>(_ builder: B) {
這個(gè)方法接收一個(gè)路由構(gòu)造器并通過(guò)接收Wrapped
來(lái)驗(yàn)證路由構(gòu)造器,如上一行所定義,HTTP.Responder
s。vapor
的Droplet
和Vapor
創(chuàng)建的任何路由組都是只接受HTTP響應(yīng)的RouteBuilders。
let v1 = builder.grouped("v1")
從上面代碼看出,照??梢酝ㄟ^(guò)builder
來(lái)創(chuàng)建路由。builder:B
同樣像Droplet
或路由組一樣工作。任何在Droplet
和路由組上工作的方法都可以在這個(gè)builder
上工作。
Empty Initializable
如果有空的init
方法,可以將EmptyInitializable
添加到路由集合。這允許通過(guò)其類型名稱添加路線集合。
class V1Collection: RouteCollection, EmptyInitializable {
init() { }
...
現(xiàn)在我們可以添加到集合而不初始化它。
drop.collection(V1Collection.self)
繼續(xù)學(xué)習(xí)vapor學(xué)習(xí)教程-目錄