routing
在介紹完model驗證之後要開始介紹網頁程式設計的另一個觀念路由routing
,更明確的說明應該是網址路由才對,所以接下來開始跟大家介紹網址路由。
routing
路由常會讓人聯想到的是網路層的路由,簡單來說就如維基百科上對路由的說明,將網路訊息傳到對應的地方,不過這裡定義的路由明確來說是網址路由,接下來跟大家先說明一下網址路由,再跟大家說明如何在iris上透過網址路由來處理使用者的請求。
什麼是routing
什麼是網址路由呢,簡單講就是在網址上傳遞有意義的資訊,例如下列網址
example.com/api/users/2345/profile
如此可以知道他是要被導到users的profile的這個handler
並且告訴伺服器使用者編號是2345。
所以接下來要告訴大家在iris要如何處理這一類的請求,並能導到正確的handler
,並且能取得正確的使用者編號2345。
怎麼在iris上處理routing問題
這裡我們拿iris-go routing的範例來跟大家說明如何使用iris來處理網址路由的請求,首先大家先看看下列例子
app := iris.New()
// http://localhost:8080/api/users/2345/profile
app.Get("api/users/{id:uint64}/profile", userProfileHandler)
如此就能夠將前面說明的網址綁定到userProfileHandler這個handler
上,除了這樣子綁定到對應的handler
之外iris還可以將handler
分群,接下來在說明handler
分群。
group routing
上述例子說明了如何處理網址路由,如果今天又在多一個網址如下那該如何處理呢
example.com/api/users/messages/1
由於目前的網址與上述的網址有一定的相似度,所定可以將兩個網址路由分在一個群組,所以在iris的處理如下所示
app := iris.New()
users := app.Party("api/users", myAuthMiddlewareHandler)
// http://localhost:8080/api/users/42/profile
users.Get("/{id:uint64}/profile", userProfileHandler)
// http://localhost:8080/api/users/messages/1
users.Get("/messages/{id:uint64}", userMessageHandler)
除了上述的綁定該網址到handler
之外,還有另外一種PartyFunc
的寫法,如下列例子
app := iris.New()
app.PartyFunc("api/users", func(users iris.Party) {
users.Use(myAuthMiddlewareHandler)
// http://localhost:8080/api/users/42/profile
users.Get("/{id:uint64}/profile", userProfileHandler)
// http://localhost:8080/api/users/messages/1
users.Get("/messages/{id:uint64}", userMessageHandler)
})
這兩種分群的方式結果都一樣,就看大家習慣怎麼寫,所以對於網址路由綁定到對應的handler
到此告一段落,不過我們還有一個沒有說明到,接下來跟大家說明如何取得網址上對應的參數。
path parameters
上面例子都是說明該如何綁定到對應的handler
,但是沒有說明該如何從網址上取出參數,所以接下來先看一下下面例子
func userProfileHandler(ctx iris.Context) {
ctx.Writef("id (uint64): %s", ctx.Params().GetUint64("id"))
}
上述例子是實作一個handler
專門處理下列網址
example.com/api/users/2345/profile
其中就是透過ctx.Params().GetUint64("id")來取得參數2345。
網址路由的注意事項
在iris的網址路由的處理能夠正確的綁定到對應的handler
,但是這部分要注意的是對於網址綁定的邏輯認知錯誤的狀況,請大家看看以下兩種綁定方式
app.Get("/profile/{username:string}", userHandler)
app.Get("/profile/me", userHandler2)
依據上面的綁定方式,其中/profile/me會被綁定到userHandler2,其他的/profile/*會被綁定到userHandler,若是不是這樣的認知就會造成網頁邏輯的誤判。最後請看一下網址路由參數的類別對於網路路由綁定有很大的幫助。
結論
今天跟大家分享如何在iris上處理透過網址而發出來的請求,希望大家對於網址路由已經iris如何處理網址路由有更進一步的瞭解。