FastAPI学习手册
FastAPI学习手册
Bill Lubanovic
爱飞翔 译
出版时间:2025年06月
页数:339
“这本书让你轻松学会FastAPI。作者熟练地演示了这个框架的用法,让大家很容易就能理解FastAPI的一些概念。你可以将书里的实用知识,立刻运用到实际的编程中。”
——Ganesh Harke
花旗银行(Citibank)的高级软件工程师
“这本书详细讲解了FastAPI框架及其周边产品,让读者迅速而全面地掌握如何用这套技术做Web开发。”
——William Jamir Silva
Adjust GmbH的高级软件工程师
FastAPI是个年轻而稳健的框架,它设计得相当清晰,并且利用了Python语言中的一些新特性。正如其名称所示,这个框架的速度确实快,能够与采用Go语言所编写的框架相争。熟悉Python语言的开发者能够通过这本实用教程,学到如何运用FastAPI框架,以尽可能少的代码迅速开发出Web应用。
本书作者描述了FastAPI开发中的诸多细节,并通过各种示例,讲解了表单、数据库访问、图表与地图制作等高级话题。这本书能够帮助你迅速了解RESTful API、数据验证、授权,以及性能优化等技术。FastAPI与Flask及Django框架类似,用过那两种框架的读者很容易就能学会FastAPI。
本书涵盖了以下内容:
● 怎样使用FastAPI构建Web应用程序。
● FastAPI、Starlette与Pydantic之间的区别及联系。
● 让FastAPI框架与众不同的两项特性,也就是对异步函数的支持,以及数据类型的检测及验证机制。
● Python 3.8及后续版本所支持的新功能,尤其是类型注解机制。
● 同步Python代码与异步Python代码之间的区别。
● 怎样与外部的API及服务相连接。
  1. 前言
  2. 第一部分 新知识介绍
  3. 第1章 当代的Web
  4. 1.1 预览
  5. 1.2 服务与API
  6. 1.2.1 API的类型
  7. 1.2.2 HTTP
  8. 1.2.3 REST(RESTful)
  9. 1.2.4 JSON与API数据格式
  10. 1.2.5 JSON:API
  11. 1.2.6 GraphQL
  12. 1.3 并发
  13. 1.4 分层
  14. 1.5 数据
  15. 1.6 小结
  16. 第2章 当代的Python
  17. 2.1 预览
  18. 2.2 工具
  19. 2.3 Python入门
  20. 2.3.1 Python语言本身
  21. 2.3.2 Python语言的软件包管理机制
  22. 2.3.3 虚拟环境
  23. 2.3.4 Poetry
  24. 2.3.5 源代码的格式
  25. 2.3.6 测试
  26. 2.3.7 源代码控制与持续集成
  27. 2.3.8 Web开发工具
  28. 2.4 API与服务
  29. 2.5 变量只不过是个名字
  30. 2.6 类型提示
  31. 2.7 数据结构
  32. 2.8 Web框架
  33. 2.8.1 Django
  34. 2.8.2 Flask
  35. 2.8.3 FastAPI
  36. 2.9 小结
  37. 第二部分 FastAPI导览
  38. 第3章 FastAPI简介
  39. 3.1 预览
  40. 3.2 什么是FastAPI
  41. 3.3 FastAPI应用程序
  42. 3.4 处理HTTP请求
  43. 3.4.1 通过URL路径传递参数
  44. 3.4.2 通过查询字符串传递参数
  45. 3.4.3 通过请求体传递参数
  46. 3.4.4 通过Header传递参数
  47. 3.4.5 通过多种方式获取HTTP请求之中的数据
  48. 3.4.6 用哪一种方式获取数据最好
  49. 3.5 给出HTTP响应
  50. 3.5.1 状态码
  51. 3.5.2 Header
  52. 3.5.3 HTTP响应的类型
  53. 3.5.4 类型转换
  54. 3.5.5 通过response_model返回另一种数据模型
  55. 3.6 自动化的文档
  56. 3.7 如何处理更为复杂的数据
  57. 3.8 小结
  58. 第4章 异步、并发与Starlette简介
  59. 4.1 预览
  60. 4.2 Starlette
  61. 4.3 并发的类型
  62. 4.3.1 分布式计算与并行计算
  63. 4.3.2 操作系统级别的进程
  64. 4.3.3 操作系统级别的线程
  65. 4.3.4 绿色线程
  66. 4.3.5 回调
  67. 4.3.6 Python生成器
  68. 4.3.7 Python的async、await关键字与asyncio库
  69. 4.4 FastAPI与异步开发
  70. 4.5 直接使用Starlette做Web开发
  71. 4.6 插曲:清理Clue House
  72. 4.7 小结
  73. 第5章 Pydantic、类型提示与数据模型简介
  74. 5.1 预览
  75. 5.2 类型提示
  76. 5.3 给数据归组
  77. 5.4 其他一些数据归组方案
  78. 5.5 一个简单的示例
  79. 5.6 对类型做验证
  80. 5.7 对取值做出验证
  81. 5.8 小结
  82. 第6章 描述依赖关系
  83. 6.1 预览
  84. 6.2什么是依赖
  85. 6.3 由依赖导致的问题
  86. 6.4 依赖注入
  87. 6.5 FastAPI的依赖注入
  88. 6.6 在FastAPI代码里面描述依赖关系
  89. 6.7 依赖关系的作用范围
  90. 6.7.1 为单个的路径函数指定依赖关系
  91. 6.7.2 为多条路径指定同一种依赖关系
  92. 6.7.3 为整个应用程序指定依赖关系
  93. 6.8 小结
  94. 第7章 各种Web框架之间的对比
  95. 7.1 预览
  96. 7.2 Flask与FastAPI的异同
  97. 7.2.1 处理URL之中的参数
  98. 7.2.2 处理查询字符串之中的参数
  99. 7.2.3 处理请求体之中的参数
  100. 7.2.4 处理标头之中的参数
  101. 7.3 Django框架与Flask及FastAPI的异同
  102. 7.4 这三种Web开发框架在其他方面的特性对比
  103. 7.5 这三个框架在数据库方面的异同
  104. 7.6 如何在这三种框架之间选择
  105. 7.7 其他一些Python Web框架
  106. 7.8 小结
  107. 第三部分 制作网站
  108. 第8章 Web层
  109. 8.1 预览
  110. 8.2 插曲:从上到下、从下到上,还是从内到外
  111. 8.3 REST式的设计
  112. 8.4 网站的文件与目录布局
  113. 8.5 网站的第一版代码
  114. 8.6 处理HTTP请求
  115. 8.7 在顶级app下面添加多个次一级的subrouter
  116. 8.8 构建Web层
  117. 8.9 定义数据模型
  118. 8.10 Stub Data与Fake Data
  119. 8.11 先确定一些常见的操作
  120. 8.12 建立Fake Data
  121. 8.13 开始测试
  122. 8.14 利用FastAPI自动生成的测试表单作测试
  123. 8.15 Web层应该通过Service层做中介,而不应直接与Data层通信
  124. 8.16 分页与排序
  125. 8.17 小结
  126. 第9章 Service层
  127. 9.1 预览
  128. 9.2 如何确定网站所应提供的服务
  129. 9.3 网站的文件布局
  130. 9.4 确保网站安全
  131. 9.5 实现Service层中的各种函数
  132. 9.6 测试
  133. 9.7 Service层的其他事务
  134. 9.7.1 日志记录
  135. 9.7.2 指标测量、监控、可观测性
  136. 9.7.3 追踪
  137. 9.7.4 杂项
  138. 9.8 小结
  139. 第10章 Data层
  140. 10.1 预览
  141. 10.2 DB-API
  142. 10.3 SQLite
  143. 10.4 网站的文件布局
  144. 10.5 让网站运作起来
  145. 10.6 测试
  146. 10.6.1 全面测试
  147. 10.6.2 单元测试
  148. 10.7 小结
  149. 第11章 认证与授权
  150. 11.1 预览
  151. 11.2 又得跑个题:我们真的需要做认证吗
  152. 11.3 认证方式
  153. 11.4 全局认证:让所有人共用密语
  154. 11.5 对每一位访问者分别做认证
  155. 11.6 采用新式技术给每一位访问者分别做认证
  156. 11.6.1 OAuth2
  157. 11.6.2 表示用户的User模型
  158. 11.6.3 实现Data层中与User有关的操作
  159. 11.6.4 实现一套与Data层中的User操作类似的Fake操作
  160. 11.6.5 实现Service层中与User有关的操作
  161. 11.6.6 实现Web层中与User有关的操作
  162. 11.6.7 测试
  163. 11.6.8 修改顶层的主程序
  164. 11.6.9 回顾早前实现的认证步骤
  165. 11.6.10 JWT
  166. 11.6.11 经由OIDC协议,通过第三方账号做认证
  167. 11.7 授权
  168. 11.8 中间件
  169. 11.8.1 CORS(跨域资源共享)
  170. 11.8.2 通过第三方包实现认证与授权
  171. 11.9 小结
  172. 第12章 测试
  173. 12.1 预览
  174. 12.2 对Web API做测试
  175. 12.3 对哪里的代码做测试
  176. 12.4 如何做测试
  177. 12.5 Pytest
  178. 12.6 网站的文件布局
  179. 12.7 自动化的单元测试
  180. 12.7.1 Mocking
  181. 12.7.2 Test Double与Fake
  182. 12.7.3 对Web层做测试
  183. 12.7.4 对Service层做测试
  184. 12.7.5 对Data层做测试
  185. 12.8 自动化的集成测试
  186. 12.9 Repository模式
  187. 12.10 自动化的全面测试
  188. 12.11 安全测试
  189. 12.12 负载测试
  190. 12.13 小结
  191. 第13章 将网站部署到生产环境之中
  192. 13.1 预览
  193. 13.2 部署网站
  194. 13.2.1 采用多个Worker来运行服务器
  195. 13.2.2 HTTPS
  196. 13.2.3 Docker
  197. 13.2.4 云服务
  198. 13.2.5 Kubernetes
  199. 13.3 改善网站的性能
  200. 13.3.1 Async
  201. 13.3.2 缓存
  202. 13.3.3 数据库、文件、内存
  203. 13.3.4 队列
  204. 13.3.5 Python本身
  205. 13.4 疑难排解
  206. 13.4.1 确定这是哪一类问题
  207. 13.4.2 查看日志
  208. 13.4.3 收集指标
  209. 13.5 小结
  210. 第四部分 漫谈
  211. 第14章 数据库、数据科学以及一点点AI
  212. 14.1 预览
  213. 14.2 数据存储方案
  214. 14.3 关系型数据库及SQL
  215. 14.3.1 SQLAlchemy
  216. 14.3.2 SQLModel
  217. 14.3.3 SQLite
  218. 14.3.4 PostgreSQL
  219. 14.3.5 EdgeDB
  220. 14.4 非关系型数据库(NoSQL数据库)
  221. 14.4.1 Redis
  222. 14.4.2 MongoDB
  223. 14.4.3 Cassandra
  224. 14.4.4 Elasticsearch
  225. 14.5 SQL数据库中的NoSQL特性
  226. 14.6 数据库负载测试
  227. 14.7 数据科学与人工智能(AI)
  228. 14.8 小结
  229. 第15章 文件
  230. 15.1 预览
  231. 15.2 如何支持分块传输
  232. 15.3 上传文件
  233. 15.3.1 通过File()实现文件上传
  234. 15.3.2 通过UploadFile实现文件上传
  235. 15.4 下载文件
  236. 15.4.1 FileResponse
  237. 15.4.2 StreamingResponse
  238. 15.5 提供静态文件服务
  239. 15.6 小结
  240. 第16章 表单与模板
  241. 16.1 预览
  242. 16.2 表单
  243. 16.3 模板
  244. 16.4 小结
  245. 第17章 数据发现与数据可视化
  246. 17.1 预览
  247. 17.2 Python与数据处理
  248. 17.3 读取并输出PSV格式的文本数据
  249. 17.3.1 用csv包读取PSV文件
  250. 17.3.2 用python-tabulate包读取PSV文件
  251. 17.3.3 用pandas读取PSV文件并输出其内容
  252. 17.4 读取SQLite数据库中的数据并以网页的形式显示
  253. 17.4.1 与图表显示有关的软件包
  254. 17.4.2 图表示例1:试用Plotly
  255. 17.4.3 图表示例2:绘制直方图
  256. 17.4.4 与地图显示有关的软件包
  257. 17.4.5 地图示例
  258. 17.5 小结
  259. 第18章 游戏
  260. 18.1 预览
  261. 18.2 与游戏制作有关的Python包
  262. 18.3 拆分游戏逻辑
  263. 18.4 游戏的设计
  264. 18.5 Web层的第一部分工作:实现游戏的初始化
  265. 18.6 Web层的第二部分工作:实现游戏的后续步骤
  266. 18.7 Service层的第一部分工作:实现游戏的初始化
  267. 18.8 Service层的第二部分工作:判断玩家猜测得是否正确
  268. 18.9 测试
  269. 18.10 Data层的工作:实现游戏的初始化
  270. 18.11 开始玩这个猜单词游戏
  271. 18.12 小结
  272. 附录A 延伸阅读
  273. 附录B 用作示例数据的神秘生物及探索者
书名:FastAPI学习手册
作者:Bill Lubanovic
译者:爱飞翔 译
国内出版社:中国电力出版社
出版时间:2025年06月
页数:339
书号:978-7-5198-9958-5
原版书书名:FastAPI
原版书出版商:O'Reilly Media
Bill Lubanovic
 
Bill Lubanovic在长达40余年的软件开发生涯中积累了丰富的实战经验,开发过的项目跨越数据库、Web、分布式系统等多个领域。他曾负责用Python重新实现流行工具Wayback Machine。
Bill Lubanovic精通Linux系统、Web开发,以及Python语言。他最近与同事采用FastAPI重写了一套做生物医学研究的大型API。Bill是O’Reilly出版的《Linux System Administration》一书的合著者,他还撰写了O’Reilly的《Introducing Python》。
Bill Lubanovic started developing software with Unix in the 1970s, GUIs in the 1980s, and the Web in the 1990s. He now does web visualization work for a wind energy company.
 
 
本书封面动物是一只刺尾鬣蜥(学名:spiny-tailed iguana,又名栉尾蜥),在生物学上面的属名是Ctenosaura。这个词源自希腊语的ctenos(意思是梳,刺尾鬣蜥的背部与尾部正有这种梳状物)以及saura(意思是蜥蜴)。在Ctenosaura属里面,目前已知有15个种,其中包括five-keeled刺尾鬣蜥(学名Ctenosaura quinquecarinata)、black-chested刺尾鬣蜥(学名Ctenosaura melanosterna)、Motagua刺尾鬣蜥(学名Ctenosaura palearis)、Oaxaca刺尾鬣蜥(学名Ctenosaura oaxacana)、Roatán刺尾鬣蜥(学名Ctenosaura oedirhina)与Utila刺尾鬣蜥(学名Ctenosaura bakeri)等。
刺尾鬣蜥的体长范围是4.9英寸(12.446厘米)~39英寸(99.06厘米)。每种刺尾鬣蜥都有不同的颜色,而且会随着体温、情绪、健康程度以及栖息地的温度,改变其颜色。这些颜色包括棕色、黑色、灰色、粉色、绿色与黄色。一般来说,刺尾鬣蜥是杂食动物,吃各种水果、花朵、树叶以及小动物。
鬣蜥各地都有,而刺尾鬣蜥,则原产于墨西哥与中美洲。它们出现在热带及亚热带的干燥林及灌木丛中,偶尔也出现在被人类改变的地方乃至城镇之中。有几种刺尾鬣蜥,只出现在很小的一块区域内,例如Roatán刺尾鬣蜥,只出现在洪都拉斯海湾群岛的罗阿坦岛,又例如Utila刺尾鬣蜥,只出现在乌提拉岛的沼泽与红树林地带(这个岛远离洪都拉斯的加勒比海岸),再比如Motagua刺尾鬣蜥,只出现在危地马拉。
刺尾鬣蜥之中的几个,是濒危或极危物种。有几个物种在美国是入侵物种(西部的和黑色的刺尾鬣蜥)。刺尾鬣蜥面临各种威胁,例如栖息地由于发展农业或养牛而丧失,有人将其当成宠物做非法交易,遭到偷猎,遭遇栖息地破碎(habitat fragmentation)问题,有人引入了它们的天敌,或是有人因为害怕刺尾鬣蜥而将其杀掉等。O’Reilly图书封面上的许多动物属于濒危动物,无论是否濒危,这些动物都对这个世界有着重要的意义。
购买选项
定价:98.00元
书号:978-7-5198-9958-5
出版社:中国电力出版社