什么是 web 開發(fā)框架
上一節(jié)課,我們簡單地認識了下 Flask 和 Django 這兩個 Web 開發(fā)框架。但是限于篇幅原因有一個很重要的概念 “什么是 Web 開發(fā)框架?” 并沒有在上節(jié)課講到。這節(jié)課我們就來學習下什么是 Web 開發(fā)框架。
1. web 開發(fā)的歷史
1.1 靜態(tài)內容的網(wǎng)站
1989 年,TimBerner 提出了一種能讓遠隔兩地的研究者們共享知識的設想。它的基本理念是:借助多文檔之間相互關聯(lián)形成的超文本(HyperText),連成可相互參閱的 WWW(World Wide Web)。
在互聯(lián)網(wǎng)早期,網(wǎng)站的內容是靜態(tài)的,瀏覽相同地址的頁面返回的內容不會發(fā)生變化。使用 HTML 語言描述網(wǎng)頁的內容,例如,用 HTML 描述某個網(wǎng)站的首頁如下:
<html>
<body>
<p>今天的日期是 2020 年 1 月 1 日</p>
</body>
</html>
無論什么時候去訪問這個網(wǎng)站,網(wǎng)頁總是顯示 “今天的日期是 2020 年 1 月 1 日”,如果用戶希望訪問網(wǎng)頁的時候能夠實時顯示今天的日期,就無法實現(xiàn)這樣的功能了。
由于網(wǎng)頁的內容是不發(fā)生變化的,因此早期互聯(lián)網(wǎng)站只能用于共享靜態(tài)的文檔,無法實現(xiàn)復雜的應用。
1.2 早期的動態(tài)網(wǎng)站
后來,互聯(lián)網(wǎng)得到了飛速的發(fā)展,人們不再滿足網(wǎng)頁只有靜態(tài)文本的形式,于是開發(fā)動態(tài)網(wǎng)頁的技術就應運而生了,例如專用于開發(fā)動態(tài)網(wǎng)頁的 PHP 編程語言。1995 年,Rasmus Lerdorf 發(fā)明了 PHP 編程語言。PHP 是在服務器端執(zhí)行腳本語言,它輸出 HTML 文本返回給瀏覽器。
使用 PHP 開發(fā)的網(wǎng)頁,網(wǎng)頁內容是運行時刻動態(tài)生成的。在上面的例子中,很容易實現(xiàn)實時顯示今天的日期的功能,PHP 腳本通過調用 date () 函數(shù)獲取當前日期, 即可生成包含有當前日期的 HTML 文件。
1.3 web 開發(fā)需要越來越多的編程
在互聯(lián)網(wǎng)早期,網(wǎng)站中的主要內容由靜態(tài)頁面構成,開發(fā)一個網(wǎng)站并不需要太多的編程工作,網(wǎng)站開發(fā)人員會編寫 HTML 文件即可,很多網(wǎng)站甚至于不需要程序員的參與。
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站的功能越來越復雜,網(wǎng)站提供的功能日趨豐富,網(wǎng)站更像是一個本地應用程序,而不是單純展示內容的網(wǎng)頁。在這個時期,開發(fā) Web 需要編寫大量的程序,一個復雜的 Web 開發(fā)項目包含有數(shù)萬行、甚至于數(shù)十萬行的源代碼,也就是說,寫一個網(wǎng)站開始變得越來越 “麻煩”。
不僅是麻煩,而且網(wǎng)站開發(fā)需要進行大量的重復性工作,比如說網(wǎng)站 A 需要開發(fā)一個后臺管理系統(tǒng),網(wǎng)站 B 也需要后臺管理系統(tǒng)。后臺管理系統(tǒng)功能的實現(xiàn)邏輯又非常相似,我們開發(fā)兩個網(wǎng)站就要寫兩套后臺管理系統(tǒng)的代碼,極大地增加了程序員的工作量。
既然是這樣,我們?yōu)槭裁床荒馨丫W(wǎng)站開發(fā)中這些相似甚至一樣的功能抽離出來,封裝在一起,等到需要的時候再調用呢?
那個時候的程序員非常有效率,說干就干,他們把大量的相似性功能封裝起來,等到需要使用的時候進行調用,于是就慢慢地形成的 “框架” 的概念。
2. 什么是 Web 開發(fā)框架
其實框架這個詞并不是 Web 開發(fā)領域所首創(chuàng),他最早出現(xiàn)在軟件開發(fā)行業(yè)中,一開始 “框架” 是這樣被定義的:框架是一種提供了可重用的公共結構的技術,為構建新的應用程序提供了極大的便利。
例如:在桌面應用程序開發(fā)的領域,微軟公司的 Visual Studio C++ 為應用程序生成框架,基于 VC++ 應用程序框架可以大大地提升桌面程序的開發(fā)效率。
而隨著 Web 開發(fā)項目的復雜度的日益提升,軟件開發(fā)中的框架技術被引入到 Web 開發(fā)領域。Web 開發(fā)框架是用于進行 Web 開發(fā)的一套軟件架構,Web 框架為 Web 應用程序提供了基礎的功能。開發(fā)人員在 Web 框架的基礎上實現(xiàn)自己的業(yè)務邏輯,基于 Web 框架開發(fā)應用,開發(fā)人員只需要專注應用的業(yè)務邏輯,非業(yè)務邏輯的基礎功能則由框架提供,從而提升開發(fā)效率。
3. web 開發(fā)框架的主要作用
3.1 利用 web 開發(fā)框架簡化應用開發(fā)
Web 框架的主要作用是減輕 Web 應用開發(fā)的工作量。使用 Web 框架進行 Web 開發(fā)的時候,在進行路由分發(fā)、頁面模板、數(shù)據(jù)緩存、數(shù)據(jù)庫訪問等方面,不需要自己再重新實現(xiàn),而是將業(yè)務邏輯相關的代碼寫入框架就可以。
下面通過一個具體的例子說明,Web 框架是如何減輕 Web 應用開發(fā)的工作量。
3.2 論壇系統(tǒng)概述
一個論壇系統(tǒng)由如下數(shù)據(jù)構成:
- 主題,每個主題包含有標題和內容,使用 topicID 標識該主題;
- 用戶,每個用戶包含姓名和密碼,使用 userID 標識該用戶。
假設論壇的域名是 www.bbs.com
,它向外界提供了若干可訪問的 URL:
URL | 功能 |
---|---|
http://www.bbs.com/topics/12373 | 訪問 topicID 為 12373 的主題 |
http://www.bbs.com/users/1353 | 訪問 userID 為 1353 的用戶頁面 |
3.3 處理頁面的函數(shù)
在服務器端有兩個處理頁面函數(shù):
函數(shù) showTopic(topicID):
- 處理形式為 /topics/xxx 的頁面請求,xxx 為 topicID;
- 根據(jù) topicID 返回對應的 topic 的內容;
函數(shù) showUser(userID) :
- 處理形式為 /users/xxx 的頁面請求,xxx 為 userID;
- 根據(jù) userID 返回對應的 user 的內容。
3.4 服務端處理流程
假設瀏覽器訪問 URL http://www.bbs.com/topics/12373
,處理的邏輯如下圖所示:
-
服務端收到
/topics/12373
的頁面請求; -
查詢合適的函數(shù)處理路徑為
/topics/12373
的頁面;- showTopic 處理形式為
/topics/xxx
的頁面請求; - showUser 處理形式為
/users/xxx
的頁面請求; - 因此選擇 showTopic 來處理此次頁面請求。
- showTopic 處理形式為
-
將頁面路徑拆分為
/topics
和12373
,把12373
作為topicID
; -
將
topicID
傳遞給showTopic
,執(zhí)行該函數(shù)。
對每一個頁面處理請求都需要進行如上的 4 步處理,在這 4 個步驟中,只有第 4 步才是應用關心的業(yè)務邏輯。如果基于 Web 框架開發(fā) Web 應用,Web 框架完成第 1 步、第 2 步、第 3 步的工作,應用程序完成第 4 步的工作。即應用程序只需要編寫具體處理頁面的函數(shù),其余繁瑣的、與業(yè)務無關的工作交給 Web 框架,因此使用 Web 框架可以大大地減輕開發(fā)的工作量。
4. 小結
本節(jié)課講解了 Web 開發(fā)框架的概念,使用思維導圖描述如下:
引入 Web 開發(fā)框架的目的:讓開發(fā)人員只需要專注應用的業(yè)務邏輯,非業(yè)務邏輯的基礎功能則由框架提供,從而提升開發(fā)效率。通過一個具體的例子,演示了 Web 開發(fā)框架處理請求的步驟。