编辑推荐
延续畅销书《七周七语言》、《七周七数据库》的体例和风格
学习流行的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开发者。