FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
关键特性:
- 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
- 高效编码:提高功能开发速度约 200% 至 300%。*
- 更少 bug:减少约 40% 的人为(开发者)导致错误。*
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
依赖
Python 3.6 及更高版本
FastAPI 站在以下巨人的肩膀之上:
并发和并行
异步有时候也叫做并发。并发(Concurrency)和并行(parallelism)是不同的概念,并发是指一个处理器同时处理多个任务,并行是指多个处理器同时处理多个不同的任务,并发是逻辑上的同时发生,并行是物理上的同时发生。
FastAPI既支持异步并发,也支持多线程并行。
async和await
异步并发使用async和await来实现。
FastAPI的请求生命周期
ASGI是 异步服务器网关接口,介于网络协议和python应用之间的标准接口,能够处理多种通用的协议类型
FastAPI使用Uvicorn来启动服务,Uvicorn是Python的ASGI web服务器实现。
直到最近,Python还缺乏用于异步框架的最低层次的服务器/应用程序接口。ASGI规范填补了这一空白,这意味着我们现在能够开始构建一套可跨所有异步框架使用的通用工具。
Uvicorn目前支持HTTP/1.1和WebSockets。
Uvicorn基于uvloop和httptools构建的非常快速的ASGI服务器,uvloop是asyncio的优秀替代。实现异步任务。
下图是FastAPI完整的请求生命周期