七周七Web开发框架
内容介绍
本书带领读者认识和学习7种影响现代Web应用并改娈了Web开发方式的框架,以期给Web开发者带来启发和思考。
本书延续了同系列的畅销书《七周七语言》、《七周七数据库》的体例和风格。全书共8章,前7章介绍了Sinatra、CanJS、AngularJS,Ring、Webmachine、Yesod和lmmutant共计7种Web开发框架,最后一章总结回顾了所有的知识点。书中对每一种框架的介绍,都为构建Web应用带来了独特而强大的思路。除此之外,书中还提供了一系列代码示例和在线资源以供参考。
本书适合有一定基础的Web开发人员阅读,能够帮助读者拓宽思路,激发更多的设计灵感。
目录
- 第1章 Sinatra1
- 1.1 简单的领域特定语言2
- 1.2 第1天:构建一个书签应用2
- 1.2.1 你好,Sinatra3
- 1.2.2 用RSpec来测试4
- 1.2.3 REST风格的API6
- 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章 CanJS37
- 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 使用datao方法从页面获取数据模型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章 AngularJS77
- 3.1 概览77
- 3.2 第1天:使用依赖注入79
- 3.2.1 你好,AngularJS80
- 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章 Ring118
- 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把数据转化为HTML130
- 4.2.5 使用Compojure处理路由133
- 4.2.6 我们在第1天学到的136
- 4.3 第2天:拼接的模式137
- 4.3.1 定义API137
- 4.3.2 处理JSON138
- 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 Enlive149
- 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章 Webmachine159
- 5.1 Webmachine简介159
- 5.2 第1天:HTTP请求状态机161
- 5.2.1 起步162
- 5.2.2 Hello,World162
- 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章 Yesod200
- 6.1 Yesod简介201
- 6.1.1 组成部分201
- 6.1.2 计划201
- 6.2 第1天:你不能搞错的数据202
- 6.2.1 新手入门202
- 6.2.2 Hello,World203
- 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天:继续Rumble224
- 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