標籤:any put 項目 sock handler ons 使用者 string main
上一章我們講了如何啟動一個dotweb程式,本篇文章將介紹如何註冊路由。
router是dotweb用來管理路由的結構體,它提供了一些關於路由操作函數。
app := dotweb.New()router := app.HttpServer.Router()
在上一篇文章中我們講了dotweb.New()的用處,HttpServer負責處理請求,管理路由、session、中介軟體等等功能。稍後我會介紹server對象。在這裡我們擷取路由對象也是通過httpserver擷取。一般我們會聲明一個函數,在該函數裡註冊路由,避免在main函數裡有過多的代碼。樣本如下:
func main(){ app := dotweb.New() InitRouter(app.HttpServer)
app.StartServer(8080)
}
func InitRouter(hs *dotweb.HttpServer){
hs.Router().Get("/index", Index)
}
func Index(ctx *dotweb.HttpContext){
ctx.WitreString("Hello Dotweb!")
}
在以上樣本中我們聲明了一個名為 InitRouter 的函數,它將在main函數被執行,在 InitRouter函數裡我們註冊不同的路由,而 Index 函數被我們成為 UserHandler 它用來處理請求。上述代碼將返回“Hello Dotweb!”字串。
hs.Router().GET("/index",Index)//HttpGet請求hs.Router().POST("/post",Post)//HttpPost請求hs.Router().HEAD("/head",Head)//HttpHead請求hs.Router().OPTIONS("/pptions",Options)//HttpOptions請求hs.Router().PUT("/put",Put)//HttpPut請求hs.Router().DELETE("/delete",Delete)//httpDelete請求
HTTP定義的要求方法一共有八種,除了上述六種還有TRACE和CONNECT兩種。大部分情境下我們使用上述六種要求方法就可以滿足項目需求,而RESTful Web API定義要求方法也不包含TRACE和CONNECT。雖然dotweb沒有提供TEACE和CONNECT要求方法,但是它額外提供了四種。
hs.Router().Any("/any",Any)
Any函數表示你可以用任何要求方法請求該地址,如果是GET函數那麼這個地址只能被GET方法的請求訪問,但如果是Any函數你可以用GET請求也可以用POST請求、PUT請求等等。
hs.Router().HiJack("/hijack",Hijack)
HiJack使用的是GET方法請求,但是它又和普通的GET請求不同。它一般用於長串連,一般的請求不需要用到它。如果你想要瞭解更多的HiJack使用方法可以參考dotweb的姊妹項目—longweb。它為web程式提供長串連服務,github地址:https://github.com/devfeel/longweb。該項目實測百萬長串連,如果你有需要可以參考或者使用該項目。它是免費、開源的。
hs.Router().ServerFile("/img/xxx.jpg","/webroot/img")//第一個參數表示路由地址,第二個參數表示伺服器上檔案地址
ServerFile用來訪問靜態檔案。
hs.Router().RegisterRoute("WebSocket","/websocket",Websocket)
RegisterRoute可以註冊以上所有類型的路由,方法類型由第一個參數區分,WebSocket需要用這種方法註冊路由。
以上就是dotweb提供註冊路由的函數,更多的路由註冊方式你可以通過閱讀源碼得知。在此我解釋下路由註冊函數的兩個形參,第一個是string類型的參數,它表示路由地址。假設本機地址是192.168.0.1,連接埠號碼為8080.如果參數為“/”則表示根地址,你輸入192。168.0.1:8080就可以訪問到。如果是“/index”它的地址是192.168.0.1:8080/index。dotweb還有一種叫做參數路由的路由配置,“/news/:id”這裡的“:id”表示一個參數,如果你瞭解restful風格你就會明白這種配置方式的含義,當然這裡的參數允許有多個“/news/:uid/:id”。第二個參數是一個形參為*dotweb.HttpContext的函數,它負責處理使用者請求,參數表示當前請求的上下文,你可以通過它訪問session、cache、request等等對象。
需要注意的是dotweb有個設定,如果你啟動它那麼所有非head的路由都將會被註冊一個head方法的路由,它在需要驗證請求是否可用的情境下非常有用,下面是啟用方法,預設值為false。
app.HttpServer.SetEnabledAutoHEAD(true)
接下來我將介紹UserHandler,如果你有過javaweb或者asp.net mvc的開發經驗那麼UserHandler非常好理解,它就是控制器中的方法。你可以在這裡做簡單的CRUD也可以做複雜的業務處理,甚至你也可以在這裡使用三層的設計。你可以把UserHandler都寫到一個go檔案中,也可以按照業務分到不同go檔案中,事實上我建議你分開。我將在後續文章中介紹UserHandler的寫法,實際上你掌握了dotweb.HttpContext的用法就可以去實現UserHandler。
當然在dotweb中也支援設定檔裝載路由,我會在後續文章中專門寫一篇介紹如何使用設定檔,在那裡我會把dotweb的配置相關的介紹一遍。隨著dotweb受到的關注越來越多更多的人蔘與到dotweb這個項目中來,我們一起努力完善增強dotweb,在此我希望你也能參與到dotweb中來,因為我們需要你的力量。項目地址:https://github.com/devfeel/dotweb,你可以在github項目地址中找到我們的官方QQ群,我們歡迎你加入dotweb大家庭。
dotweb——go語言的一個微型web架構(三)路由註冊