亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Swift Web 開發之 Vapor - 路由(二)

2019-11-06 06:47:32
字體:
來源:轉載
供稿:網友

上篇文章帶大家基本了解了一下開始一個 Vapor 項目的流程,本篇緊接著來說說在所有 Web 框架中都最關鍵的 “路由”,因為 “路由” 模塊在 Web 項目中擔任很重要的角色,所以很多語言的 Web 框架都把 “路由” 抽離到框架層,從而減少開發者的工作量,一個設計得易用強大的 “路由” 系統也會給相應給框架增添不少色彩。

Web 開發中的路由這個概念簡單來說就是 URL 路徑到具體處理函數之間的映射,只有設定好了路由,訪問者才能在瀏覽器根據相關 URL 規則進行頁面跳轉和訪問,Vapor 對路由做了很多實用性設計,包括路由的構建、路由組、類型安全的路由參數、路由集合等等,希望看完本篇文章你能用 Vapor 寫出一些簡單的路由,我們先來看看 Vapor 最簡單的路由注冊。

Droplet

注冊路由之前我們需要知道 Droplet 這個類,每個程序都應該有一個它的實例,控制著整個程序的生命周期,之后我們會通過 droplet 來注冊路由,添加 PRovider,添加中間件 (middleware) 等等。 droplet 的初始化很簡單,一個空程序看起來就像這樣:

import Vaporlet drop = Droplet()// your magic heredrop.run()

注冊路由

注冊一個最基本的路由通過對全局 Droplet 對象調用一個方法,指定路徑和一個閉包來接收操作處理。

drop.get("welcome") { request in return "Hello"}

我們通過調用 get() 方法來注冊了一個路徑為 /welcome 的路由,并返回了 “Hello” 這個字符串到瀏覽器,當然我們除了 get 還可以其他的標準 HTTP 方法,比如 post、 put、 patchdelete、options。

另外我們還可以使用 add() 方法來注冊路由,以接收第一個參數 Method 作為 HTTP 方法來動態注冊路由,Method 是一個枚舉,包含了上述所列的 HTTP 標準方法,代碼看起來是這樣:

drop.add(.trace, "welcome") { request in return "Hello"}

可能你會想明明上面已經提供了對應的方法來注冊路由,為什么還要多一個 add() 方法來注冊路由?因為這個方法可以動態注冊,并且支持一些其他不常見的方法(比如 trace)。

另外有一種關于多級路徑的寫法,直接使用參數分割,而不是在一個 String 參數中用 / 分開,官方推薦是這種寫法,因為可以更容易寫出類型安全的路由參數。

drop.get("foo", "bar", "baz") { request in return "You requested /foo/bar/baz"}

如果想在 URL 路由中使用通配符怎么辦?

app.get("anything", "*") { request in return "Matches anything after /anything"}

像這個例子因為用了 * 尾隨參數,可以匹配到如下所有路徑:

/anything/anything/foo/anything/foo/bar/anything/foo/bar/baz

Request

每個路由的閉包都會有一個 Request 參數,用來獲得每一個訪問請求的相關內容,比如 URL 參數、HTTP Header、HTTP Body 等等,而且 Vapor 都已經為你封裝好了很方便的接口來獲取這些內容,甚至直接解析 JSON。

詳細使用可以參考官方文檔 Request 一節。

路由參數

Vapor 提倡使用類型安全的路由參數來接收數據,我們可以在路由方法中使用 Swift 類型來指定參數類型,Vapor 會在內部解析并將參數返回給閉包以供使用,非常方便。

drop.get("users", Int.self) { request, userId in return "You requested User #/(userId)"}

Swift 中處處有協議,路由參數也是如此,我們所見例子中的 Int 其實就是 Vapor 給實現了 StringInitializable 協議,當然 String 也已經默認實現。

public protocol StringInitializable { init?(from string: String) throws}

Response

每個路由的閉包中可以返回三種類型的內容,Response、ResponseRepresentable、throw,你可以你可以返回自己所需的 HTTP 狀態碼、URL 重定向、JSON等,基本涵蓋日常所需的請求返回。

Response

Response 是 Vapor 中 HTTP 模塊中定義的基于 Message 的類,有很多構造方法方便我們自定義 response 返回:

// 重定向Response(redirect: "http://vapor.codes")// JSONResponse(status: .ok, json: JSON(["hello":"world"]))// StringResponse(body: "hello")
ResponseRepresentable

ResponseRepresentable 是一個協議,任何遵循這個協議的對象均可在路由中返回,就像之前例子中我們直接返回了字符串,就是因為 Vapor 默認給 String 實現了 ResponseRepresentable 協議,讓我們可以方便的在閉包中直接返回字符串,類似的還有 JSON、Model 對象。

throw

另外一大特性就是可以直接在路由中拋出異常,我們可以 throw 任何遵從 Swift.Error 協議的對象,當然 Vapor 已經為我們封裝好了幾個常用的 Error 來方便我們拋出異常。

drop.get("404") { request in throw Abort.notFound}

當我們請求這個地址的時候一般會看到一個 Vapor 默認提供的錯誤頁面,還挺漂亮的,如果不想用 Vapor 提供的默認錯誤頁面,我們可以從 drop.middleware 中移除 AbortMiddleware 并添加自己的實現即可。

vapor404

Abort 枚舉在 Vapor 中定義如下:

public enum Abort: Swift.Error { case badRequest case notFound case serverError case custom(status: Status, message: String)}

Status 枚舉了幾十個我們可能用到的 HTTP 狀態碼,如 200(.ok)、 301(.movedPermanently)、403(.forbidden) …

路由組

Vapor 提供了路由組的概念,通常用來集中組織一組相同前綴,添加中間件,限制主機名,或者集中管理的路由,路由組有兩個類型:GroupGrouped。

Group 通過一個閉包來收納旗下所有的路由,讓它們有統一的路徑前綴,示例如下:

drop.group("v1") { v1 in v1.get("users") { request in // get the users }}

Grouped 原理類似,只是形式上有所變化,通過 drop.grouped() 方法返回一個 RouteGroup 對象來收納路由。

let v1 = drop.grouped("v1")v1.get("users") { request in // get the users}

文章到此關于 Vapor 路由基本的內容也差不多都介紹完畢了,當然這里講的可能并不全面,示例代碼基本來自于官方文檔(感謝


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产欧美一区二区三区成人| 国产成人精品国内自产拍免费看| 亚洲无av在线中文字幕| 中文字幕亚洲欧美日韩在线不卡| 成人妇女淫片aaaa视频| 91精品在线影院| 亚洲第一页自拍| 国产99在线|中文| 久久中国妇女中文字幕| 国产精品旅馆在线| 欧美激情亚洲自拍| 欧美性猛交xxxx免费看久久久| www.欧美精品一二三区| 国产精品99蜜臀久久不卡二区| 欧美高清在线视频观看不卡| 欧美国产乱视频| 日韩中文字幕国产精品| 亚洲第一在线视频| 精品av在线播放| 亚洲美女动态图120秒| 少妇av一区二区三区| 日韩精品视频在线| 日韩av免费在线| 欧美亚洲在线视频| 欧美性猛交视频| 亚洲欧洲成视频免费观看| 亚洲japanese制服美女| 一色桃子一区二区| 国产精品揄拍一区二区| 亚洲最大中文字幕| 国产精品入口免费视频一| 欧美性猛交xxxx黑人| 日韩av中文字幕在线| 91国在线精品国内播放| 中文字幕在线视频日韩| 欧美日韩精品国产| 国产精品视频专区| 亚洲精品免费av| 国内偷自视频区视频综合| 国产精品久久久久av免费| 国产日韩在线精品av| 91精品综合视频| 国产精品在线看| 人妖精品videosex性欧美| 精品日本美女福利在线观看| 国产精品久久久久久久一区探花| 欧美一二三视频| 欧美三级xxx| 国产日韩精品在线| 欧美在线不卡区| 欧美成人激情图片网| 97免费视频在线播放| 久久综合伊人77777尤物| 欧美有码在线观看视频| 欧美裸体男粗大视频在线观看| 亚洲成人精品久久久| 欧美电影在线免费观看网站| 色综合影院在线| 亚洲天堂开心观看| 欧美最顶级的aⅴ艳星| 91精品国产综合久久香蕉922| 国产精品一区二区3区| 97在线日本国产| 欧美日韩亚洲网| 久久久免费观看| 欧美网站在线观看| 国产精品爽黄69天堂a| 精品视频在线观看日韩| 亚洲欧美精品伊人久久| 少妇高潮久久77777| 亚洲精品国产综合区久久久久久久| 色妞在线综合亚洲欧美| 日韩午夜在线视频| 九九精品在线播放| 一区二区欧美亚洲| 九九精品视频在线| 亚洲电影在线看| 欧美精品生活片| 日韩成人在线视频| 九九久久综合网站| www.久久色.com| 国产精品入口免费视| 精品亚洲国产视频| 亚洲国产成人精品久久| 亚洲伊人一本大道中文字幕| 中文字幕亚洲天堂| 国内精品国产三级国产在线专| 国产福利视频一区| 91在线免费看网站| 欧美精品在线免费观看| 九九精品在线播放| 亚洲欧美激情另类校园| 欧美性少妇18aaaa视频| 欧美国产亚洲视频| 日本中文字幕不卡免费| 亚洲综合成人婷婷小说| 精品国内产的精品视频在线观看| 欧美国产极速在线| 91网站免费看| 亚洲精品在线观看www| 亚洲国产古装精品网站| 在线成人免费网站| 欧美视频精品一区| 亚洲91精品在线观看| 亚洲精品国产精品乱码不99按摩| 伦理中文字幕亚洲| 亚洲人成电影网站| 欧美美女15p| 国产精品丝袜白浆摸在线| 亚洲精品动漫久久久久| 狠狠久久五月精品中文字幕| 麻豆一区二区在线观看| 欧美裸体xxxx极品少妇软件| 国产在线观看一区二区三区| 91国产视频在线播放| 国产亚洲综合久久| 亚洲第一中文字幕在线观看| 久久影视电视剧凤归四时歌| 日韩一区视频在线| 日韩精品亚洲元码| 国产精品久久久精品| 国产精品爽黄69| 中文字幕欧美日韩精品| 国产精品99免视看9| 成人www视频在线观看| 久久亚洲综合国产精品99麻豆精品福利| 久久精品国产久精国产一老狼| 久久久久久国产精品美女| 8090成年在线看片午夜| 久久国产精品久久久久久久久久| 国产成人精品免高潮费视频| 国产精品视频成人| 国产亚洲欧美日韩美女| 欧美黑人国产人伦爽爽爽| 91成人性视频| 日韩69视频在线观看| 日韩精品视频在线观看网址| 久久久久久久97| 在线播放精品一区二区三区| 久久久久久久久亚洲| 亚洲欧洲国产一区| 中文字幕av一区二区| 55夜色66夜色国产精品视频| 57pao国产成人免费| 最近中文字幕mv在线一区二区三区四区| 另类专区欧美制服同性| 亚洲最大福利视频网站| 精品免费在线视频| 成人精品一区二区三区电影黑人| 日本久久久久久久| 亚洲美女动态图120秒| 欧美午夜影院在线视频| 久久精品2019中文字幕| 色午夜这里只有精品| 久久久人成影片一区二区三区观看| 久久久女女女女999久久| 亚洲qvod图片区电影| 国产精品久久精品| 精品成人在线视频| 中文字幕亚洲一区在线观看| 欧美人交a欧美精品| 久久久久久久久久国产| 日本视频久久久| 日韩精品免费观看|