Vapor3 接收請(qǐng)求
最近比較忙妓局,所以一直沒有時(shí)間研究服務(wù)器总放,今天就發(fā)一篇之前想發(fā)但一直沒寫的部分吧。
網(wǎng)上有很多Vapor3的安裝方法以及一個(gè)普通的get
請(qǐng)求方法好爬,所以我這里就不再寫了局雄。
這里寫的比那些稍微深入一點(diǎn),應(yīng)該能對(duì)想入門的同學(xué)有點(diǎn)幫助存炮。
這里推薦一個(gè) API 測(cè)試工具Postman
好了炬搭,進(jìn)入正文
Routers
在routers.swift
中加入以下代碼
router.get("hello") { _ in
return "Hello World!"
}
這是最簡(jiǎn)單的一個(gè)get
請(qǐng)求,在瀏覽器中輸入localhost:8080/hello
就可以訪問穆桂,瀏覽器會(huì)返回一個(gè)Hello World!
宫盔,這里的hello
是路徑,域名:端口/路徑
享完,這里的返回值是一個(gè)遵守ResponseEncodable
協(xié)議的泛型灼芭。
這里返回的是字符串,在開發(fā)中般又,我們一般都會(huì)返回json
姿鸿,那我們要怎么返回json
呢?
首先倒源,我們建一個(gè)model
,就叫User
吧句狼,然后遵守Content
協(xié)議
final class User: Content {
var name: String
var password: String
init(name: String, password: String) {
self.name = name
self.password = password
}
}
然后
router.get("hello") { req -> Future<Response> in
let user = User(name: "testname", password: "testpassword")
return try user.encode(for: req)
}
試試看是不是返回json
了
Future
是一個(gè)泛型笋熬,在請(qǐng)求中,基本上都是返回Future
腻菇,慢慢鉆研吧胳螟!一般返回Future<Response>
的話比較方便,不會(huì)有各種轉(zhuǎn)換筹吐,這里也可以返回Future<User>
糖耸,不過要做相應(yīng)轉(zhuǎn)換才行,主要使用map
方法和flatMap
方法轉(zhuǎn)換丘薛,這里不做介紹嘉竟。
Controller
如果不想把所有代碼都寫在routers.swift
中,就可以新建一個(gè)類,比如UserController
舍扰,然后遵守RouteCollection
協(xié)議倦蚪,RouteCollection
協(xié)議有一個(gè)心須要實(shí)現(xiàn)的方法boot
。
記得要在routers.swift
文件中進(jìn)行注冊(cè)
// routers.swift
try router.register(collection: UserController())
// UserController.swift
func boot(router: Router) throws {
router.get("hello") { req -> Future<Response> in
let user = User(name: "testname", password: "testpassword")
return try user.encode(for: req)
}
}
// 也可以加一個(gè)group
let userGroup = router.grouped("user")
userGroup.get("update") { req -> Future<Response> in
let user = User(name: "testname", password: "testpassword")
return try user.encode(for: req)
}
userGroup.get("login") { req -> Future<Response> in
let user = User(name: "testname", password: "testpassword")
return try user.encode(for: req)
}
Swift
中边苹,方法可以當(dāng)作變量使用陵且,所以可以將這里的閉包進(jìn)行修改
userGroup.get("register", use: userRegister)
func userRegister(_ req: Request) thorws -> Future<Responese> {
let user = User(name: "testname", password: "testpassword")
return try user.encode(for: req)
}
這樣寫的話,看起來就沒那么亂了
好了个束,就介紹到這里慕购,如果有不懂的,可以在下面留言茬底。
全文完