編輯推薦
延續暢銷書《七周七語言》、《七周七數據庫》的體例和風格
學習流行的Web開發框架:Sinatra、CanJS、AngularJS、Ring、Webmachine、Yesod和Immutant。
通過一本書認識和掌握7種主流的Web開發框架。
本書中的每一章都討論瞭一個不同的Web框架,而且大部分都是不同的編程語言,目的是為你提供一些開發現代 Web 應用程序的全新理念、風格和技術。
內容簡介
本書帶領讀者認識和學習7種影響現代Web應用並改孌瞭Web開發方式的框架,以期給Web開發者帶來啓發和思考。
本書延續瞭同係列的暢銷書《七周七語言》、《七周七數據庫》的體例和風格。全書共8章,前7章介紹瞭Sinatra、CanJS、AngularJS,Ring、Webmachine、Yesod和lmmutant共計7種Web開發框架,末章總結迴顧瞭所有的知識點。書中對每一種框架的介紹,都為構建Web應用帶來瞭獨特而強大的思路。除此之外,書中還提供瞭一係列代碼示例和在綫資源以供參考。
本書適閤有一定基礎的Web開發人員閱讀,能夠幫助讀者拓寬思路,激發更多的設計靈感。
作者簡介
Jack Moffitt擁有使用不同語言、不同框架開發Web相關應用長達十年的經驗。他是Mozilla研究所的高級研究工程師,他工作於Servo項目,正在開發一個試驗性的新一代瀏覽器引擎。他還幫助創建瞭Ogg Vorbis格式,並且創建瞭Xiph.org基金會,這是一個非盈利的機構,緻力於開源且完全免費的多媒體編解碼器。
Fred Daoud是一位非常有熱情的Web程序員,他喜歡嘗試不同的新框架。他還是 Stripes …and Java Web Development Is Fun Again和Getting Started With Apache Click這兩本Web框架書籍的作者。作為Modernizing Medicine的軟件工程師,他使用Stripes、jQuery、YUI和CanJS進行日常開發。
內頁插圖
精彩書評
Web應用程序的迅速發展迫切需要創新的解決方案。瞭解各種框架以及它們獨特的特性,將會啓發並促使你在麵對日常工作中的挑戰時從一個新的角度去思考。
本書涵蓋瞭7種影響現代Web應用並改變瞭Web開發方式的框架:Sinatra、CanJS、AngularJS、Ring、Webmachine、Yesod和Immutant。其中每一種框架都為構建Web應用帶來瞭獨特而強大的思路:
? 擁抱Sinatra的簡單性,它摒棄瞭大框架的繁復,轉而迴歸Ruby的基礎。
? 在客戶端依賴CanJS,你可以在瀏覽器中使用JavaScript來創建完整的應用。
? AngularJS強調聲明式編程,將聲明式的HTML和JavaScript的混閤起來,隻需要說你想要什麼,而無需關心具體怎麼做。
? Ring將Web變成數據,再使用Clojure來輕鬆操縱這些數據。
? Webmachine會讓你成為高級HTTP的行傢裏手,並專注於Erlang的強大特性。
? 使用Yesod來證明Haskell的高級類型係統不僅僅是學院派的玩具。
? 使用高端的Immutant絕對是企業級框架的明智之舉。
不論你現在使用的是哪種框架,這7種框架都會影響到你的工作。
目錄
第1章 Sinatra 1
1.1 簡單的領域特定語言 2
1.2 第1天:構建一個書簽應用 2
1.2.1 你好,Sinatra 3
1.2.2 用RSpec來測試 4
1.2.3 REST風格的API 6
1.2.4 數據持久化 6
1.2.5 創建和讀取書簽 8
1.2.6 編寫自動化測試 9
1.2.7 更新和刪除書簽 10
1.2.8 我們在第1天學到的 11
1.3 第2天:創建視圖 12
1.3.1 ERB簡介 12
1.3.2 Mustache介紹 17
1.3.3 Slim介紹 20
1.3.4 我們在第2天學到的 23
1.4 第3天:添加新功能 24
1.4.1 校驗 24
1.4.2 塊參數 26
1.4.3 過濾器 27
1.4.4 為書簽打上標簽 28
1.4.5 添加標簽的API支持 31
1.4.6 使用正則錶達式來匹配路由 33
1.4.7 我們在第3天學到的 34
1.5 總結 35
1.5.1 Sinatra的強項 35
1.5.2 Sinatra的弱項 35
1.5.3 最後的思考 36
第2章 CanJS 37
2.1 CanJS的獨一二之處 37
2.2 第1天:創建對象和同步變化 39
2.2.1 你好,CanJS! 40
2.2.2 構建和擴展對象 41
2.2.3 觀察屬性的變化 44
2.2.4 使用CanJS創建一個前端書簽應用 46
2.2.5 連接模型與服務器 47
2.2.6 渲染視圖 48
2.2.7 動態綁定 50
2.2.8 我們在第1天學到的 50
2.3 第2天:創建控製器 51
2.3.1 將控製器綁定到頁麵元素上 52
2.3.2 監聽UI事件 53
2.3.3 使用data()方法從頁麵獲取數據模型 54
2.3.4 使用觀察者實現控製器之間的溝通 55
2.3.5 創建一個錶單控製器 57
2.3.6 我們在第2天學到的 60
2.4 第3天:與模型的協作 61
2.4.1 添加校驗 62
2.4.2 實現標簽的處理 64
2.4.3 過濾書簽 66
2.4.4 創建一個標簽列錶 69
2.4.5 使用路由管理瀏覽器的位置 71
2.4.6 我們在第3天學到的 73
2.4.7 對CanJS的創造者Justin
B. Meyer的采訪 74
2.5 總結 76
2.5.1 CanJS的強項 76
2.5.2 CanJS的弱項 76
2.5.3 最後的思考 76
第3章 AngularJS 77
3.1 概覽 77
3.2 第1天:使用依賴注入 79
3.2.1 你好,AngularJS 80
3.2.2 創建服務 83
3.2.3 換個角度來看我們的書簽應用前端 86
3.2.4 使用資源服務 87
3.2.5 為服務寫自動化測試 89
3.2.6 我們在第1天學到的 93
3.3 第2天:創建控製器和視圖 93
3.3.1 創建控製器和使用視圖指令 94
3.3.2 利用數據雙嚮綁定的優勢 97
3.3.3 創建書簽錶單 98
3.3.4 關於作用域的重要注意事項 100
3.3.5 端到端的自動化測試 102
3.3.6 我們在第2天學到的 104
3.4 第3天:創建過濾器和路由 105
3.4.1 為書簽添加標簽 106
3.4.2 構建一個標簽列錶 107
3.4.3 通過過濾器操作數據 108
3.4.4 定義路由 112
3.4.5 我們在第3天學到的 114
3.4.6 對AngularJS創建者Mi?ko Hevery的采訪 115
3.5 總結 116
3.5.1 AngularJS的強項 116
3.5.2 AngularJS的弱項 117
3.5.3 最後的思考 117
第4章 Ring 118
4.1 Ring簡介 118
4.2 第1天:基礎組件 120
4.2.1 起步 121
4.2.2 Hello, World! 121
4.2.3 用Korma處理數據 124
4.2.4 用Hiccup把數據轉化為HTML 130
4.2.5 使用Compojure處理路由 133
4.2.6 我們在第1天學到的 136
4.3 第2天:拼接的模式 137
4.3.1 定義API 137
4.3.2 處理JSON 138
4.3.3 驗證輸入 140
4.3.4 可組閤的路由 143
4.3.5 我們在第2天學到的 146
4.4 第3天:構建應用的其他方法 147
4.4.1 Ring中間件 147
4.4.2 Enlive 149
4.4.3 關於測試 153
4.4.4 我們在第3天學到的 154
4.4.5 對James Reeves的采訪 155
4.5 總結 156
4.5.1 Ring的強項 156
4.5.2 Ring的弱項 157
4.5.3 最後的思考 158
第5章 Webmachine 159
5.1 Webmachine簡介 159
5.2 第1天:HTTP請求狀態機 161
5.2.1 起步 162
5.2.2 Hello, World 162
5.2.3 和資源函數一起工作 165
5.2.4 資源函數 166
5.2.5 請求轉發 168
5.2.6 參數化轉發 170
5.2.7 我們在第1天學到的 171
5.3 第2天:構建應用 172
5.3.1 短鏈接 172
5.3.2 使用Mustache模闆引擎 179
5.3.3 Petite裏的模闆 182
5.3.4 處理多種內容類型 184
5.3.5 我們在第2天學到的 186
5.4 第3天:照亮HTTP的陰暗麵 186
5.4.1 讓資源可緩存 187
5.4.2 授權 193
5.4.3 我們在第3天學到的 196
5.4.4 對Justin Sheehy的采訪 197
5.5 總結 198
5.5.1 Webmachine的強項 198
5.5.2 Webmachine的弱項 199
5.5.3 最後的思考 199
第6章 Yesod 200
6.1 Yesod簡介 201
6.1.1 組成部分 201
6.1.2 計劃 201
6.2 第1天:你不能搞錯的數據 202
6.2.1 新手入門 202
6.2.2 Hello, World 203
6.2.3 使用DSL描述數據 205
6.2.4 使用模型 207
6.2.5 改變和刪除模型 210
6.2.6 我們在第1天學到的 211
6.3 第2天:視圖、錶單和認證 212
6.3.1 Ye Olde的模闆語言 213
6.3.2 功能性錶單 216
6.3.3 認證和授權 219
6.3.4 我們在第2天學到的 223
6.4 第3天:繼續Rumble 224
6.4.1 創建頭版 225
6.4.2 創建一個發布新聞錶單 228
6.4.3 查看新聞與提交評論 230
6.4.4 我們在第3天學到的 233
6.4.5 對Michael Snoyman的采訪 234
6.5 總結 237
6.5.1 Yesod的強項 237
6.5.2 Yesod的弱項 238
6.5.3 最後的思考 238
第7章 Immutant 239
7.1 Immutant簡介 239
7.1.1 Immutant的特性 240
7.1.2 計劃 240
7.2 第1天:不僅僅是網絡基礎 241
7.2.1 開始 241
7.2.2 你好,世界 242
7.2.3 分布式緩存 244
7.2.4 計劃任務 249
7.2.5 我們在第1天學到的 250
7.3 第2天:構建數據管道 251
7.3.1 消息隊列 251
7.3.2 管道 255
7.3.3 Overwatch的管道 257
7.3.4 我們在第2天學到的 262
7.4 第3天:多語言應用 263
7.4.1 疊加 263
7.4.2 集群 268
7.4.3 我們在第3天學到的 272
7.4.4 對Jim Crossley的采訪 273
7.5 總結 275
7.5.1 Immutant的強項 275
7.5.2 Immutant的弱項 275
7.5.3 最後的思考 276
第8章 結束 277
8.1 關鍵想法 277
8.1.1 簡單性 278
8.1.2 代碼運行在何處 278
8.1.3 組閤 279
8.1.4 聲明式優先於指令式 279
8.1.5 動態類型和靜態類型 280
8.1.6 狀態機 280
8.1.7 交互性 281
8.2 快樂的探索吧 281
前言/序言
《七周七Web開發框架》是一本旨在幫助讀者快速掌握現代Web開發核心技術的實用指南。本書的編寫理念在於,通過精選當下最流行、最具代錶性的七個Web開發框架,引導讀者從宏觀到微觀,係統地理解不同框架的設計思想、技術棧以及實際應用場景,從而構建堅實而全麵的Web開發知識體係。 全書將以一種循序漸進的方式展開,每一周專注於一個框架的學習。這種結構化的學習路徑,避免瞭初學者麵對海量信息時的無所適從,也確保瞭學習的深度和連貫性。我們將從基礎的、被廣泛采用的框架開始,逐步過渡到更高級、更專業的解決方案。 第一周:React - 組件化驅動的交互式用戶界麵 我們將深入探索React,一個由Facebook推齣的用於構建用戶界麵的JavaScript庫。本周的學習將側重於React的核心概念,包括: JSX語法: 理解如何在JavaScript中編寫類HTML的結構,以及它如何與React元素高效結閤。 組件化開發: 學習如何創建可復用的UI組件,並理解組件的生命周期,如何有效地管理組件的狀態和屬性。 狀態管理: 探討React內置的`useState`和`useReducer`鈎子,以及更高級的狀態管理方案,如Context API,以應對復雜應用中的狀態同步難題。 事件處理與數據流: 掌握React中事件綁定的方式,以及數據在組件之間單嚮流動的原則,理解props和state的區彆與聯係。 React Router: 學習如何使用React Router實現客戶端路由,為單頁應用(SPA)提供流暢的導航體驗。 Hooks的進階應用: 除瞭基礎的useState和useEffect,我們將探索更多自定義Hooks的創建,以及如何利用Hooks來復用組件邏輯,簡化代碼。 性能優化基礎: 瞭解React的虛擬DOM機製,以及通過`React.memo`、`useCallback`等方式進行性能優化的初步方法。 通過本周的學習,讀者將能夠獨立構建齣交互性強、動態響應的單頁應用程序的前端界麵。 第二周:Vue.js - 漸進式JavaScript框架 本周,我們將聚焦Vue.js,一個被譽為“漸進式”的JavaScript框架,以其易學易用、靈活性高而受到廣大開發者的喜愛。我們將重點學習: Vue實例與生命周期: 理解Vue實例的創建過程,以及它提供的豐富生命周期鈎子函數,掌握在不同階段執行邏輯的方法。 模闆語法與數據綁定: 深入理解Vue的模闆語法,包括指令(如`v-bind`、`v-on`、`v-if`、`v-for`)以及插值錶達式,實現聲明式的數據渲染。 組件化構建: 學習如何創建和注冊Vue組件,以及組件之間的通信方式(props、自定義事件、`$emit`),構建模塊化的應用程序。 計算屬性與偵聽器: 掌握計算屬性(computed properties)和偵聽器(watchers)的使用,實現數據的響應式計算和副作用處理。 Vue Router for Vue 3: 學習Vue Router的最新版本,配置路由錶,實現頁麵間的導航和參數傳遞。 Vuex - 狀態管理模式: 深入學習Vuex,理解其核心概念(state, getters, mutations, actions, modules),並應用於大型Vue應用的全局狀態管理。 過渡與動畫: 學習Vue提供的內置過渡組件和CSS過渡/動畫,為用戶界麵添加流暢的視覺效果。 本周的學習將使讀者能夠熟練運用Vue.js構建從小型項目到復雜應用的完整前端解決方案。 第三周:Angular - 全麵的前端開發框架 本周,我們將深入Angular的世界,這是一個由Google維護的、功能全麵的前端開發框架。Angular以其高度的規範性、強大的功能集和優秀的性能著稱,尤其適閤構建大型、企業級的單頁應用。我們將重點解析: TypeScript基礎: Angular主要使用TypeScript編寫,因此我們將首先迴顧TypeScript的核心特性,如靜態類型、接口、類等,為後續學習打下基礎。 Angular CLI: 掌握Angular命令行工具(CLI)的使用,高效地創建項目、生成組件、服務等,加速開發流程。 組件與模塊: 理解Angular的核心概念:組件(Component)和模塊(Module)。學習如何定義組件的模闆、樣式和邏輯,以及如何組織代碼到模塊中。 數據綁定與指令: 學習Angular強大的數據綁定機製(插值、屬性綁定、事件綁定、雙嚮綁定)以及內置指令(如`ngIf`、`ngFor`、`ngSwitch`)和自定義指令的創建。 服務與依賴注入: 深入理解Angular的服務(Service)以及依賴注入(Dependency Injection)係統,學習如何構建可復用的業務邏輯,並高效地管理組件間的依賴關係。 路由與導航: 學習Angular Router的強大功能,實現復雜的路由配置、路由守衛、懶加載等。 RxJS與響應式編程: Angular大量使用RxJS來實現異步操作和事件流處理。我們將學習RxJS的核心概念,如Observables、Operators,並將其應用於實際開發中。 錶單處理: 學習Angular提供的模闆驅動錶單(Template-driven Forms)和響應式錶單(Reactive Forms),實現高效的錶單驗證和數據管理。 通過本周的學習,讀者將對Angular的體係結構和開發模式有深入的理解,並能獨立開發大型、可維護的Angular應用。 第四周:Express.js - 靈活的Node.js Web應用框架 本周,我們將轉嚮後端開發,探索Node.js生態係統中最為流行和靈活的Web應用框架——Express.js。我們將學習如何使用Express.js快速搭建高效的服務器端應用: Node.js基礎迴顧: 簡要迴顧Node.js的核心概念,如事件循環、模塊係統、異步I/O等,為Express.js的學習奠定基礎。 Express.js安裝與入門: 學習如何安裝Express.js,並創建一個簡單的“Hello World”應用程序。 路由與中間件: 深入理解Express.js的路由機製,如何定義API端點,以及核心概念——中間件(Middleware)。學習如何編寫自定義中間件,實現請求處理、認證、日誌記錄等功能。 請求與響應對象: 掌握如何處理HTTP請求(request)對象,獲取請求參數、請求體、請求頭等信息;如何構造HTTP響應(response)對象,發送數據、設置狀態碼和響應頭。 模闆引擎: 學習如何集成流行的模闆引擎(如EJS, Pug, Handlebars),實現服務器端渲染,動態生成HTML。 RESTful API設計: 學習如何利用Express.js設計和實現符閤RESTful原則的API接口,為前端應用提供數據支持。 數據庫集成: 學習如何將Express.js與各種數據庫(如MongoDB, PostgreSQL, MySQL)集成,實現數據的持久化存儲和檢索。我們將介紹Mongoose(MongoDB ODM)等常用庫。 錯誤處理: 學習Express.js的錯誤處理機製,如何捕獲和處理應用程序中的錯誤,並嚮客戶端返迴友好的錯誤信息。 安全性基礎: 探討Express.js的一些基本安全實踐,如防止跨站腳本攻擊(XSS)、跨站請求僞造(CSRF)等。 本周的學習將使讀者能夠獨立開發功能完善的後端API服務,並為前端應用提供可靠的數據支撐。 第五周:Django - Python全棧Web開發框架 本周,我們將走進Python的Web開發世界,深入學習Django。Django是一個功能強大、高度集成的“電池附帶”(batteries-included)的Python Web框架,以其快速開發、安全性高、可擴展性強而聞名,非常適閤構建復雜、數據驅動的Web應用程序。我們將重點掌握: Django項目與應用結構: 理解Django的項目(project)和應用(app)的概念,學習如何創建和組織Django項目。 模型(Models)與ORM: 深入學習Django的Object-Relational Mapper(ORM)係統,如何定義數據模型(Model),與數據庫進行交互,實現數據的增刪改查。 視圖(Views)與URL配置: 學習如何編寫Django視圖函數或類,處理HTTP請求;如何配置URL路由,將URL映射到相應的視圖。 模闆(Templates)與渲染: 學習Django的模闆係統,如何使用模闆語言編寫HTML,並將數據渲染到模闆中,生成動態頁麵。 錶單(Forms)處理: 掌握Django強大的錶單處理功能,包括錶單的定義、驗證、渲染和數據提交。 管理後颱(Admin Site): 探索Django自帶的強大管理後颱,以及如何自定義和擴展它,以便於內容的管理和維護。 認證與授權: 學習Django內置的用戶認證係統,實現用戶注冊、登錄、注銷等功能,並探討權限管理。 RESTful API開發(Django REST framework): 學習如何使用Django REST framework(DRF)來構建高效、易於使用的RESTful API。 部署基礎: 簡要介紹Django應用的部署流程,瞭解相關的服務器配置和生産環境考慮。 通過本周的學習,讀者將能夠利用Django快速構建功能豐富、安全可靠的Python Web應用程序,並能勝任全棧開發工作。 第六周:Laravel - PHP現代Web開發框架 本周,我們將切換到PHP生態,學習現代、優雅的PHP Web開發框架——Laravel。Laravel以其簡潔的語法、豐富的功能集和活躍的社區而受到PHP開發者的青睞,能夠幫助開發者快速構建優雅的Web應用。我們將深入研究: Laravel安裝與項目結構: 學習使用Composer安裝Laravel,並理解其標準項目結構。 路由與控製器: 掌握Laravel的路由係統,如何定義Web路由和API路由;學習如何創建控製器(Controller)來處理業務邏輯。 Eloquent ORM: 深入學習Laravel的Eloquent ORM,這是一個強大且直觀的對象關係映射工具,簡化瞭數據庫操作。 Blade模闆引擎: 學習Laravel的Blade模闆引擎,它允許開發者使用簡潔的PHP語法編寫動態HTML,並支持模闆繼承、組件等特性。 數據庫遷移與Seeder: 學習如何使用數據庫遷移(Migrations)來管理數據庫模式的版本控製,以及如何使用Seeder填充測試數據。 錶單驗證: 掌握Laravel強大的錶單驗證功能,確保用戶輸入數據的有效性。 認證與授權: 學習Laravel內置的認證係統(Auth),實現用戶注冊、登錄、注銷,以及角色和權限的管理。 中間件(Middleware): 學習Laravel的中間件概念,用於過濾和處理HTTP請求,實現日誌記錄、認證檢查等功能。 Artisan命令行工具: 熟悉Laravel的Artisan命令行工具,它提供瞭許多便捷的命令,用於代碼生成、數據庫操作、任務調度等。 本周的學習將使讀者能夠熟練運用Laravel構建現代化、高性能的PHP Web應用。 第七周:Spring Boot - Java企業級應用開發框架 在最後一周,我們將轉嚮Java生態,探索Spring Boot。Spring Boot是Spring框架的擴展,旨在簡化Spring應用的初始化和開發過程,極大地提高瞭Java企業級應用的開發效率和便捷性,是構建微服務架構的優秀選擇。我們將學習: Java基礎迴顧與Spring Boot入門: 簡要迴顧Java開發的基礎知識,以及如何使用Spring Initializr快速創建Spring Boot項目。 核心概念:自動化配置與Starter依賴: 理解Spring Boot的自動化配置機製,以及Starter依賴如何簡化項目依賴管理。 Web開發:Spring MVC: 學習如何使用Spring Boot集成Spring MVC,創建RESTful API,處理Web請求。 數據訪問:Spring Data JPA: 掌握Spring Data JPA,簡化與關係型數據庫的交互,實現高效的數據持久化。 依賴注入(DI): 深入理解Spring框架的依賴注入(DI)和控製反轉(IoC)容器,學習如何管理Bean的生命周期和依賴關係。 RESTful Web Services: 學習如何使用Spring Boot構建健壯的RESTful Web Services,包括請求映射、請求參數處理、響應體生成等。 安全性:Spring Security: 掌握Spring Security,實現應用程序的認證和授權功能,保護敏感資源。 微服務基礎(可選): 簡要介紹Spring Boot在構建微服務架構中的作用,例如與Eureka、Config Server等配閤使用。 部署與測試: 學習如何打包Spring Boot應用,以及如何編寫單元測試和集成測試。 通過本周的學習,讀者將能夠利用Spring Boot快速構建健壯、高性能的Java企業級應用,並為進一步深入微服務開發打下堅實基礎。 本書的特色與價值: 實戰導嚮: 每個框架的學習都將輔以實際項目案例或代碼示例,確保讀者能夠學以緻用。 框架對比與選擇: 通過對不同框架的介紹,幫助讀者理解它們之間的異同,並在未來的項目中做齣閤適的框架選擇。 技術棧互補: 從前端到後端,本書覆蓋瞭當前Web開發中最主流的技術棧,為讀者提供瞭一個相對完整的知識圖譜。 循序漸進的學習麯綫: 結構化的學習安排,讓初學者能夠逐步建立起信心和知識體係。 麵嚮未來: 所選框架均為當前業界廣泛使用且發展勢頭良好的技術,為讀者的職業發展奠定堅實基礎。 《七周七Web開發框架》不僅僅是一本技術書籍,更是一段充滿挑戰與收獲的學習旅程。它將幫助您快速、高效地掌握現代Web開發的核心技能,成為一名更加齣色的Web開發者。