介紹
通過教程,可以學習並實踐使用golang構建自己的web架構。
對於REST API開發學習更加有協助。
Martini 自發布起就迅速成為最受歡迎的golang web 架構,但是它並不是盡善盡美的,Martini 作者說它效率低並且設計思想並不完美,對於初學者來說並不太好。儘管如此,因為它的上手簡單使用方便還是有一大批使用者在使用。
目前為止,完成web應用都是使用基礎的庫,所以我的文章也是是用基礎的庫重頭來搭建web架構。對於golang新手和老司機來說這都是最好的web實踐。
在教程完成後,相信搭建會對web開發有很好的理解並得到實踐經驗,並且會針對不同的實際問題,在web 架構中去試下解決方案。
什麼是web架構?
目前有兩種類型的web架構,一種是全面形的,內建了所有的模組功能,能讓你快速開始你的業務代碼。比如golang的Beego 和 Revel。
還有一種是是僅提供路由和少數內建功能的架構,他需要你自己完成如orm等額外的功能模組,具有高度的定製靈活性,大多的web架構都屬於這一種類型,如martini,Goji, Gin, gocraft/web 等。
架構和庫的區別
到底是用架構還是用庫呢?我並不反對用現成的架構,但是go提供了優秀的包讓我們輕鬆實現自己的架構。如果需要開始一個長期的項目,那麼自己來實現架構是很好的選擇。如果你剛學習golang 那麼這樣做也有助於理解golang web架構的運行原理。
本文實現的架構套件含了的功能
本教程旨在實現定製化的輕量級架構實現,而非Beego這類全能型架構。
一個架構有3個部分
路由 — 收到請求後遞交給一個handler
中介軟體 — 在請求之前或者之後完成一些重複的功能
handler — 處理請求,返迴響應
中介軟體 handler:
- Error/panic
- logging
- security
- sessions
- cookies
- Body parsing
Golang Web 架構現狀
The problem with many Go web frameworks is that these components are made for one and only one framework. They are not inter-changeable. Yes you have just routers, or just middleware systems, or just middlewares and you might use them together if they're compatible with each other. But it's a very small minority of projects and it doesn't have enough visibility except for Gorilla which has still far less followers on Github than most other frameworks.
Go doesn't have a unified convention to handle middlewares like in Ruby (Rack), Node.js (Connect.js), Clojure (Ring) and other languages. Negroni, Goji, Gin, gocraft/web, etc, are all redefining how handlers and middlewares work. It's hard to re-use open-sourced middlewares, and it's hard to understand what are the best practices for a new developer.