标题：GAE编程指南
图书信息
  书名：GAE编程指南
作者：（美） Dan Sanderson　著
ISBN：978-7-111-31452-3
定价：65.00
页数：365
出版日期：2010年11月24日
译者：唐学韬 何继业 等译
图书分类：计算机 > 软件与程序设计
原出版社：OReilly Associates
语种：简体中文
开本：16
原书名：Programming Google App Engine(1E)
所属丛书：O''Reilly精品图书系列
图书简介
随着云计算变得越来越热，G公司跟随着成功的商业领导者Amazon，推出了自己的面向开发者的API业务。GAE就是其重要的一项技术。它可以帮助Web开发者构建Web应用程序，帮助小公司快速成长，并且开拓了构建Web基础设置的新路子。
本书介绍了如何利用GAE强大的网络设施来构建Web应用程序。本书教授中级和高级的Web开发者使用App Engine来构建具有强大的可移植性的应用，介绍了使用App Engine API和服务来执行常见开发任务的方法，并说明了什么样的Web应用最适合使用App Engine来开发。
译者自序
简单来说，GAE其实就是一个Web应用程序托管平台，它使得我们有机会可以用到直正的大型企业级基础架构来运行我们的应用程序。时下的Web应用程序其实主要也就两大部分，一部分是数据，另一部分是逻辑，如果还有其他的部分，那就是资源这一部分了。GAE为我们所提供的也就是这几大部分的基础服务，我们只需要按部就班地开发程序即可，其他的一切都可以交给GAE去做。
本书共15章，深入介绍了GAE的方方面面，非常具体，是绝佳的GAE学习资料。在对GAE做了一个概括性的介绍之后，Dan立刻就教我们如何创建第一个GAE应用程序，这样我们也就算是进了GAE的门了。然后，Dan为我们介绍了GAE的各个方面。为了使初学者能够更好地使用Python，他还在第14章中着重介绍了Django这个Python框架。
为了方便开发人员了解GAE，本书同时使用了Java和Python。不过，我更建议大家使用Python，这是因为GAE目前对Java的支持还不是很好，而且GAE对Python还有不少额外的支持。
本书作者Dan Sanderson是一名软件工程师，在Web领域工作了十多年，服务过很多著名的企业，经验非常丰富。他把自己的经验和知识都融入到本书的编写中，再次感谢作者为我们所做的这么一件了不起的事情。希望大家能够喜欢上GAE。
本书的主要翻译工作由我和何继业完成，其中第10～15章由何继业老师翻译，我负责其余部分的翻译工作以及全书的统稿工作。参加本书翻译校对工作的还有黄惠庄、卢彦良、蒲巧惠、陈丽丽、胡元江、张杨、赵杰、吴斌、郭敏、林丹、王跃等。
由于时间紧迫，再加上译者水平有限，书中可能会存在一些错误或不妥，因此，大家若是在阅读过程中发现有任何问题，请随时联系我，我们将及时更新本书的勘误表。
唐学韬
2010年7月于广州
图书目录
前言 ...................... 1 
第1章 GAE简介 ..... 9 
运行时环境 .........................................9 
静态文件服务器 ..........................................12 
数据存储区 ..................................................12 
实体和属性...........................................13 
查询和索引...........................................13 
事务 14 
服务 .......16 
GAccount .....................................................17 
任务队列和计划任务 ...................................17 
开发人员工具 ..............................................18 
管理控制台 ..................................................19 
App Engine暂时还做不到的事情 ................19 
使用入门 .....................................................20 
第2章 创建一个应用程序 ............................................ 22 
安装SDK .....................................................22 
安装Python SDK ..................................23
安装Java SDK ......................................27 
开发应用程序 ..............................................31 
用户偏好模式 .......................................31 
开发一个Python应用程序 ....................32 
开发一个Java应用程序.........................45 
开发控制台...........................................60 
注册应用程序 ..............................................62 
应用程序的ID和标题 ...........................63 
设置域名 ..............................................64 
Apps和身份验证 ..................................65 
上传应用程序 ..............................................66 
管理控制台简介 ..........................................67 
第3章 处理Web请求 .................................................. 70 
App Engine的架构 .......................................71 
对前端进行配置 ..........................................73 
配置Python应用程序 ............................73 
配置Java应用程序 ................................75 
域名 76 
应用程序的ID和版本号 ........................77 
请求处理器...........................................78 
静态文件和资源文件 ............................82 
安全连接 ..............................................88 
通过GAccount进行授权 .......................91 
应用程序是如何运行的 ...............................93 
Python运行时环境 ................................93 
Java运行时环境 ....................................95 
沙盒 95 
应用程序缓存 .......................................97 
日志 ....................................................100 
配额限制 ...................................................104 
请求限制 ............................................104
CPU限制 ............................................104 
服务限制 ............................................105 
部署限制 ............................................106 
付费配额 ............................................107 
有关资源使用量的头 ..........................109 
第4章 数据存储区实体 ............................................. 110 
实体、键和属性 ........................................ 111 
Python数据存储区API简介 ....................... 112 
Java数据存储区API简介 ........................... 115 
属性值 . 117 
字符串、文本和字节字符串 .............. 119 
未设置与空值 .....................................120 
多值属性 ............................................120 
键和键对象 ................................................121 
使用实体 ...................................................123 
通过键获取实体 .................................123 
查看实体对象 .....................................124 
保存实体 ............................................125 
删除实体 ............................................126 
第5章 数据存储区查询 ............................................. 127 
查询和类别 ................................................128 
查询结果和键 ............................................128 
GQL .....129 
Python的查询API ......................................132 
Query类 ..............................................133 
Python中的GQL .................................134 
获取结果 ............................................135 
Keys-Only查询 ...................................137 
Java的查询API ..........................................138 
Java中的Keys-Only查询 .....................140
索引简介 ...................................................140 
自动索引和简单查询 .................................142 
单个类别上的所有实体 ......................143 
单个等式筛选条件 .............................143 
大于和小于筛选条件 ..........................144 
单个排序规则 .....................................145 
针对键的查询 .....................................147 
类别无关查询 .....................................148 
自定义索引和复杂查询 .............................149 
多个排序规则 .....................................149 
多个属性上的筛选条件 ......................150 
多个等式筛选条件 .............................153 
不等于和IN运算符 ....................................156 
未设置和不编入索引的属性 ......................157 
排序和值类型 ............................................158 
查询和多值属性 ........................................159 
一个简单的例子 .................................160 
Python中的MVP .................................161 
MVP和等式筛选条件 .........................161 
MVP和不等式筛选条件 .....................163 
MVP和排序规则 ................................164 
爆炸式索引.........................................166 
配置索引 ...................................................166 
Python中的索引配置 ..........................167 
Java中的索引配置 ..............................168 
第6章 数据存储区事务 ............................................. 170 
实体和实体组 ............................................172 
键、路径和祖先 .................................173 
祖先查询 ............................................174 
事务中都会发生些什么 .............................175 
事务读 ................................................176
Python中的事务 .........................................176 
Java中的事务 .............................................178 
实体是如何被更新的 .................................182 
实体是如何被读取的 .................................185 
批量更新 ...................................................185 
索引是如何被更新的 .................................186 
第7章 用Python进行数据建模 .................................. 188 
模型与属性 ................................................189 
属性声明 ...................................................190 
属性值的类型 .....................................191 
属性的验证.........................................192 
不编入索引的属性 .............................194 
自动值 ................................................194 
列表属性 ............................................195 
模型和架构的迁移 .............................197 
对关系进行建模 ........................................197 
一对多关系.........................................200 
一对一关系.........................................200 
多对多关系.........................................201 
模型的继承 ................................................203 
查询和多态模型 ........................................204 
创建你自己的属性类 .................................206 
验证属性值.........................................206 
封送值类型.........................................207 
自定义默认值 .....................................209 
接受参数 ............................................210 
第8章 Java持久化API .............................................. 212 
设置JPA .....................................................213 
实体和键 ...................................................214 
实体的属性 ................................................217
嵌入式对象 ................................................219 
保存、获取和删除对象 .............................219 
JPA中的事务 .............................................221 
查询和JPQL ...............................................222 
关系 .....226 
更多信息 ...................................................231 
第9章 内存缓存 . 232 
Python的Memcache API ............................234 
在Python中设置和获取值 ..................234 
设置和获取多个值 .............................235 
memcache命名空间 ............................236 
缓存过期时间 .....................................237 
删除键 ................................................237 
memcache计数器 ................................238 
缓存统计信息 .....................................239 
Java的Memcache API ................................240 
第10章 获取URL和Web资源 .................................... 245 
在Python中获取URL .................................246 
在Java中获取URL .....................................248 
Python中的异步请求 .................................250 
RPC对象 .............................................252 
通过回调函数处理结果 ......................253 
第11章 收发电子邮件和即时消息 .............................. 256 
启用入站服务 ............................................258 
发送电子邮件消息 .....................................259 
发件人地址.........................................260 
收件人 ................................................262 
附件 ....................................................262 
在Python中发送电子邮件 ..................263 
在Java中发送电子邮件.......................266
接收电子邮件消息 .....................................268 
在Python中接收电子邮件 ..................269 
在Java中接收电子邮件.......................271 
发送XMPP消息 .........................................273 
发送聊天邀请 .....................................275 
发送聊天消息 .....................................275 
检查GTalk用户的状态 ........................277 
接收XMPP消息 .........................................278 
在Python中接收XMPP消息 ................279 
在Java中接收XMPP消息 ....................281 
第12章 大批量数据操作和远程访问 .......................... 283 
在Python中设置远程API ...........................284 
在Java中设置远程API ...............................285 
使用Bulk Loader工具 ................................285 
安装SQLite .........................................286 
备份与恢复.........................................287 
上传数据 ............................................288 
下载数据 ............................................292 
控制Bulk Loader ................................295 
使用远程外壳工具 .....................................296 
通过脚本使用远程API ..............................297 
第13章 任务队列和计划任务 .................................... 299 
任务队列 ...................................................300 
处理速率和令牌桶 .............................301 
任务的要素.........................................302 
任务处理器和重试 .............................303 
对任务进行测试和管理 ......................304 
在Python中使用任务队列 ..................305 
在Java中使用任务队列.......................310 
事务型的任务入队操作 ......................313 
计划任务 ...................................................314
第14章 Web应用程序框架: Django ........................... 318 
安装Django ................................................319 
创建一个Django项目 .................................320 
请求处理器脚本 ........................................321 
Django App Engine Helper.........................322 
创建一个Django应用程序 .........................325 
在Django中使用App Engine模型 ..............327 
使用Django的单元测试和Fixture ..............329 
使用Django表单 ........................................333 
第15章 部署和管理应用程序 .................................... 337 
上传应用程序 ............................................338 
使用版本 ...................................................339 
管理服务配置文件 .....................................341 
管理索引 ...................................................341 
浏览和下载日志 ........................................343 
监控数据存储区 ........................................346 
应用程序设置 ............................................346 
管理开发人员 ............................................347 
配额与付费 ................................................348 
获得帮助 ...................................................349