天天看點

dotweb——go語言的一個微型web架構(三)路由注冊

上一章我們講了如何啟動一個dotweb程式,本篇文章将介紹如何注冊路由。

router是dotweb用來管理路由的結構體,它提供了一些關于路由操作函數。

在上一篇文章中我們講了dotweb.New()的用處,HttpServer負責處理請求,管理路由、session、中間件等等功能。稍後我會介紹server對象。在這裡我們擷取路由對象也是通過httpserver擷取。一般我們會聲明一個函數,在該函數裡注冊路由,避免在main函數裡有過多的代碼。示例如下:

<a></a>

 在以上示例中我們聲明了一個名為 InitRouter 的函數,它将在main函數被執行,在 InitRouter函數裡我們注冊不同的路由,而 Index 函數被我們成為 UserHandler 它用來處理請求。上述代碼将傳回“Hello Dotweb!”字元串。

HTTP定義的請求方法一共有八種,除了上述六種還有TRACE和CONNECT兩種。大部分場景下我們使用上述六種請求方法就可以滿足項目需求,而RESTful Web API定義請求方法也不包含TRACE和CONNECT。雖然dotweb沒有提供TEACE和CONNECT請求方法,但是它額外提供了四種。

Any函數表示你可以用任何請求方法請求該位址,如果是GET函數那麼這個位址隻能被GET方法的請求通路,但如果是Any函數你可以用GET請求也可以用POST請求、PUT請求等等。

HiJack使用的是GET方法請求,但是它又和普通的GET請求不同。它一般用于長連接配接,一般的請求不需要用到它。如果你想要了解更多的HiJack使用方法可以參考dotweb的姊妹項目—longweb。它為web程式提供長連接配接服務,github位址:https://github.com/devfeel/longweb。該項目實測百萬長連接配接,如果你有需要可以參考或者使用該項目。它是免費、開源的。

ServerFile用來通路靜态檔案。

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。

接下來我将介紹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大家庭。