什么是 Web 框架?
上一節(jié)課《Django 框架簡(jiǎn)介》我們簡(jiǎn)單地認(rèn)識(shí)了下 Django 框架,在正式開始學(xué)習(xí)它之前,我還要跟你說(shuō)下 Web 框架到底是個(gè)什么東西?為什么市面上會(huì)有各種各樣形形色色的 Web 開發(fā)框架?以及使用 Web 框架進(jìn)行開發(fā)的優(yōu)勢(shì)在哪里?這些問(wèn)題在這節(jié)課里面你都可以找到答案。
1. Web 框架
在計(jì)算機(jī)領(lǐng)域,框架指的是由部分組織、機(jī)構(gòu)或者個(gè)人開發(fā)出的一套程序模板。我們借助這套程序模板可以快速進(jìn)行應(yīng)用開發(fā)。往往一個(gè)優(yōu)秀的框架是能幫我們簡(jiǎn)化各種常用操作,比如各種類型數(shù)據(jù)庫(kù) (SQLite、MySQL 或者 PostgreSQL)的增刪改查、簡(jiǎn)化各種熱門互聯(lián)網(wǎng)組件(如消息中間件等)的接入以及提供各種復(fù)雜功能的再包裝。
特別對(duì)于 Web 框架,會(huì)對(duì)到發(fā)生過(guò)來(lái)的 HTTP 請(qǐng)求做一系列的過(guò)濾處理,最后才到達(dá)我們的視圖函數(shù)進(jìn)行處理。計(jì)算機(jī)的每一個(gè)領(lǐng)域都有大量的早期互聯(lián)網(wǎng)工作者為我們做了不少工作。為了減少重復(fù)造輪子,早期的互聯(lián)網(wǎng)工作者為我們開發(fā)了許多優(yōu)秀的代碼庫(kù),而后逐漸演變成開發(fā)框架,以供普通開發(fā)者使用。正是由于開發(fā)框架的出現(xiàn),大大降低了程序員的開發(fā)門檻,也導(dǎo)致越來(lái)越多的人員進(jìn)入該行業(yè)。
Web 框架是專門針對(duì) Web 應(yīng)用開發(fā)的一套開發(fā)工具,幾乎都是開源和任意使用,由社區(qū)維護(hù) 。由于 Web 的后端開發(fā)語(yǔ)言有很多種,比如 Java、Python 以及 Go 等,它們都對(duì)應(yīng)著若干個(gè)非常流行的 Web 框架。Java 中最火的 Web 開發(fā)框架莫過(guò)于 Spring 以及 SpringMVC 系列框架,Python 中有 Django、Flask 和 Tornado 等。而在這些框架的基礎(chǔ)上,我們幾乎只需要十幾行就能構(gòu)建出一個(gè)簡(jiǎn)單的 Web 服務(wù)。
2. 使用 Web 框架的好處
使用 Web 框架進(jìn)行開發(fā)的好處如下:
-
應(yīng)用業(yè)界最流行的 Python Web 框架,如 Django、Flask 等,可以幫我們快速完成應(yīng)用開發(fā),節(jié)省開發(fā)時(shí)間和人力投入,這種做法往往是中小型企業(yè)開發(fā)的不二之選。大型企業(yè)也許會(huì)開發(fā)出自己的服務(wù)框架,比如阿里的微服務(wù)框架 Dubbo。但對(duì)于大多數(shù)企業(yè)而言,由于財(cái)力和人力限制,基于框架開發(fā)是最高效的解決方案;
-
流行的 Web 框架往往具備一定的優(yōu)異性能和良好的代碼規(guī)范,我們遵守一定的開發(fā)原則就能構(gòu)建出良好風(fēng)格的 API 接口,同時(shí)開發(fā)應(yīng)用也會(huì)具備框架的優(yōu)異性能。例如 Tornado 框架是專注高性能的 Web 框架;
-
避免重復(fù)造輪子,由框架完成各種常用操作代碼。開發(fā)人員集中精力完成業(yè)務(wù)邏輯開發(fā),可以顯著降低 Web 開發(fā)難度。
-
在熟練使用 Web 框架之后,我們可以認(rèn)真學(xué)習(xí) Web 框架源碼,這些代碼是來(lái)自全世界優(yōu)秀的程序員奉獻(xiàn)智慧的結(jié)晶。從中我們可以學(xué)習(xí)到如何處理 Web 請(qǐng)求,如何使用開發(fā)語(yǔ)言(如 Java、Python 等)的各種設(shè)計(jì)模式、高級(jí)封裝等。只有深入學(xué)習(xí)了這些知識(shí),我們才有可能成為一名合格的應(yīng)用開發(fā)者。
在信息安全領(lǐng)域,只會(huì)使用工具進(jìn)行網(wǎng)絡(luò)攻擊的人,被嘲笑為腳本小子。只會(huì)使用框架,調(diào)各種 API 接口的開發(fā)者,往往被人戲稱為調(diào)包俠。因此,掌握 Web 框架的使用是第一步,除此之外,我們?cè)趯W(xué)完框架的基本使用之后,還需要真正深入框架源碼進(jìn)行學(xué)習(xí),除了能快速定位開發(fā)問(wèn)題之外,也是快速提升個(gè)人能力的一個(gè)有效途徑。
3. 各種語(yǔ)言的 Web 框架介紹
目前,主流的 Web 框架可以按照語(yǔ)言類型進(jìn)行分類,比如基于 Java 開發(fā)的 Web 框架、基于 Python 開發(fā)的 Web 框架和基于 Go 開發(fā)的 Web 框架等等。每種語(yǔ)言領(lǐng)域內(nèi)的 Web 框架也是各有特色,有大而全,有小而精,還有專注異步高性能等等。
熱門的 Python Web 框架有:
主流的 Java Web 框架有:
-
Spring/Spring Boot/Spring MVC 等:幾乎是大部分 Java web 開發(fā)者的首選和必選,占據(jù)了大部分市場(chǎng)?;?Spring 及其衍生框架,我們能迅速開發(fā)一個(gè) Java Web 服務(wù),幾乎不需要任何 Web 開發(fā)基礎(chǔ);
-
Dubbo:阿里巴巴的開源的高性能 RPC 框架、特點(diǎn)是分布式、高性能以及高度可擴(kuò)展;
-
Struts2:老一代的 Java Web 框架,特點(diǎn)是高度成熟。不過(guò)目前趨勢(shì)來(lái)看,已經(jīng)很少人使用 Struts2 來(lái)開發(fā)新的 Web 服務(wù)。
Go 作為近幾年快速崛起的后端開發(fā)語(yǔ)言,也受到了廣大后端開發(fā)者的追捧,Go Web 框架也隨之而來(lái),其中的典型代表有:
- Beego 框架:它類似于 Python Web 框架 Django,走大而全的風(fēng)格,具備各種 Web 應(yīng)用程序的通用功能;
- Gin 框架:Gin 是 Go 的一個(gè)微框架,封裝優(yōu)雅,接口友好。具有快速靈活,容錯(cuò)方便、性能優(yōu)異等特點(diǎn);
- Echo 框架:Go 的微型 Web 框架。其具備快速 HTTP 路由器、支持?jǐn)U展中間件,同時(shí)還支持靜態(tài)文件服務(wù)。
4. 小結(jié)
本小結(jié)介紹了 Web 框架相關(guān)知識(shí),梳理了使用 Web 框架開發(fā)的諸多好處,最后介紹了三種后端開發(fā)語(yǔ)言的主流 Web 框架。任何一種 Web 框架其核心思想和封裝功能都有很多相似。完全掌握一個(gè) Web 框架的使用并熟讀其源碼,掌握框架核心處理流程,對(duì)于快速上手使用其他 Web 框架以及提升自身編碼水平都有極大的促進(jìn)作用。