FastAPI 框架,高性能,易学,快速开发,已准备好生产环境
文档: https://fastapi.tiangolo.com
源代码: https://github.com/fastapi/fastapi
FastAPI 是一个现代、快速(高性能)的 Python Web 框架,基于标准的 Python 类型提示构建 API。
主要特点是:
- 快速:性能非常高,与 NodeJS 和 Go 相当(得益于 Starlette 和 Pydantic)。是市面上最快的 Python 框架之一。
- 开发速度快:将开发功能的平均速度提高 200% 到 300%。*
- 更少的 Bug:减少约 40% 的人为(开发者)错误。*
- 直观:出色的编辑器支持。随处可见的代码补全。减少调试时间。
- 简单易学:设计得易于使用和学习。减少阅读文档的时间。
- 简洁:最大限度地减少代码重复。每次参数声明都包含多个功能。减少 Bug。
- 健壮:获得生产就绪的代码。拥有自动交互式文档。
- 基于标准:基于(并且完全兼容)API 的开放标准:OpenAPI(以前称为 Swagger)和JSON Schema。
* 内部开发团队进行测试,构建生产应用程序的估算结果。
“我最近大量使用 FastAPI。 [...] 我实际上正计划将它用于我们团队所有的 ML 服务,这些服务正在被集成到核心 Windows 产品和 Office 产品中。”
“我们采用了 FastAPI 库来启动一个 REST 服务器,可以查询该服务器以获取预测结果。[为 Ludwig 服务]”
“Netflix 很荣幸地宣布开源我们的危机管理编排框架:Dispatch![使用 FastAPI 构建]”
“我对 FastAPI 感到无比兴奋。它太有趣了!”
“说实话,你构建的东西看起来非常扎实和完善。在很多方面,它就是我想要的 Hug——看到有人构建出这样的东西,真是鼓舞人心。”
“如果你想学习一个现代框架来构建 REST API,请查看 FastAPI [...] 它快速、易用、易学 [...]”
“我们已经切换到 FastAPI 来构建我们的 API [...] 我认为你会喜欢它 [...]”
“如果你想构建一个生产级的 Python API,我强烈推荐 FastAPI。它设计精美、简单易用且可高度扩展,已成为我们 API 优先开发策略的关键组成部分,并驱动了许多自动化和服务的实现,例如我们的虚拟 TAC 工程师。”
在 2025 年底发布了一部 FastAPI 微纪录片,你可以在线观看:
如果你正在构建一个将在终端中使用的 CLI 应用程序而不是 Web API,请尝试 Typer。
Typer 是 FastAPI 的“小兄弟”。它的目标是成为 **CLIs 的 FastAPI**。⌨️ 🚀
FastAPI 站在巨人的肩膀上:
创建并激活一个虚拟环境,然后安装 FastAPI:
$ pip install "fastapi[standard]"
---> 100%注意:请确保将 "fastapi[standard]" 放在引号中,以确保它能在所有终端中正常工作。
创建一个名为 main.py 的文件,内容如下:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}或者使用 async def...
如果你的代码使用了 async / await,请使用 async def:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}注意:
如果你不确定,请查看文档中async 和 await 部分的“匆忙?”章节。
使用以下命令运行服务器:
$ fastapi dev main.py
╭────────── FastAPI CLI - Development mode ───────────╮
│ │
│ Serving at: http://127.0.0.1:8000 │
│ │
│ API docs: http://127.0.0.1:8000/docs │
│ │
│ Running in development mode, for production use: │
│ │
│ fastapi run │
│ │
╰─────────────────────────────────────────────────────╯
INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [2248755] using WatchFiles
INFO: Started server process [2248757]
INFO: Waiting for application startup.
INFO: Application startup complete.关于命令 fastapi dev main.py...
命令 fastapi dev 会读取你的 main.py 文件,从中检测 FastAPI 应用,并使用 Uvicorn 启动服务器。
默认情况下,fastapi dev 会以启用自动重载的模式启动,适用于本地开发。
你可以在FastAPI CLI 文档中了解更多信息。
在浏览器中打开 http://127.0.0.1:8000/items/5?q=somequery。
你将看到 JSON 响应如下:
{"item_id": 5, "q": "somequery"}你已经创建了一个 API,它:
- 在 路径
/和/items/{item_id}接收 HTTP 请求。 - 这两个 路径 都接受
GET操作(也称为 HTTP 方法)。 - 路径
/items/{item_id}有一个 路径参数item_id,它应该是一个int。 - 路径
/items/{item_id}有一个可选的str查询参数q。
现在访问 http://127.0.0.1:8000/docs。
你将看到自动生成的交互式 API 文档(由 Swagger UI 提供):
现在,访问 http://127.0.0.1:8000/redoc。
你将看到备选的自动 API 文档(由 ReDoc 提供):
现在修改 main.py 文件,使其能够接收来自 PUT 请求的请求体。
使用标准的 Python 类型声明请求体,这得益于 Pydantic。
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}你创建的 fastapi dev 服务器应该会自动重新加载。
现在访问 http://127.0.0.1:8000/docs。
- 交互式 API 文档将自动更新,包括新的请求体:
- 点击“Try it out”按钮,它允许你填写参数并直接与 API 交互:
- 然后点击“Execute”按钮,用户界面将与你的 API 通信,发送参数,获取结果并显示在屏幕上:
现在,访问 http://127.0.0.1:8000/redoc。
- 备选文档也将反映新的查询参数和请求体:
总而言之,你只需声明一次参数、请求体等的类型作为函数参数。
你使用标准的现代 Python 类型来完成此操作。
你无需学习新的语法、特定库的方法或类等。
只需使用标准的Python。
例如,对于一个 int:
item_id: int或者对于一个更复杂的 Item 模型:
item: Item...通过这单一声明,你将获得:
- 编辑器支持,包括:
- 代码补全。
- 类型检查。
- 数据验证:
- 当数据无效时,自动且清晰的错误提示。
- 甚至可以验证深度嵌套的 JSON 对象。
- 输入数据转换:将网络传输来的数据转换为 Python 数据和类型。读取来源:
- JSON。
- 路径参数。
- 查询参数。
- Cookies。
- Headers。
- 表单。
- 文件。
- 输出数据转换:将 Python 数据和类型转换为网络数据(如 JSON):
- 转换 Python 类型(
str,int,float,bool,list等)。 datetime对象。UUID对象。- 数据库模型。
- ...还有更多。
- 转换 Python 类型(
- 自动交互式 API 文档,包括 2 种备选用户界面:
- Swagger UI。
- ReDoc。
我们才刚刚开始,但你已经明白了这一切是如何工作的。
尝试更改这行代码:
return {"item_name": item.name, "item_id": item_id}从:
... "item_name": item.name ...改为:
... "item_price": item.price ......看看你的编辑器如何自动补全属性并知道它们的类型:
有关更完整的示例,包括更多功能,请参阅教程 - 用户指南。
剧透警告:教程 - 用户指南包括:
- 从其他不同地方声明参数,例如:headers、cookies、表单字段和文件。
- 如何设置验证约束,如
maximum_length或regex。 - 一个非常强大且易于使用的依赖注入系统。
- 安全和身份验证,包括对OAuth2(带JWT 令牌)和HTTP Basic 身份验证的支持。
- 更高级(但同样简单)的声明深度嵌套 JSON 模型的技术(得益于 Pydantic)。
- GraphQL 与 Strawberry 及其他库的集成。
- 许多额外功能(得益于 Starlette),例如:
- WebSockets
- 基于 HTTPX 和
pytest的极其简单的测试 - CORS
- Cookie Sessions
- ...等等。
你可以选择将 FastAPI 应用部署到 FastAPI Cloud,如果你还没加入,快去加入等待列表吧。🚀
如果你已经拥有 FastAPI Cloud 账户(我们已从等待列表中邀请了你 😉),你可以通过一个命令部署你的应用程序。
部署前,请确保你已登录:
$ fastapi login
You are logged in to FastAPI Cloud 🚀然后部署你的应用:
$ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev就是这样!现在你可以通过该 URL 访问你的应用了。✨
FastAPI Cloud 由 FastAPI 背后的同一作者和团队构建。
它以最小的力气简化了构建、部署和访问 API 的过程。
它将构建 FastAPI 应用的开发体验带到了部署到云的效果。🎉
FastAPI Cloud 是 FastAPI 及相关开源项目的主要赞助商和资助者。✨
FastAPI 是开源的,并且基于标准。你可以选择将 FastAPI 应用部署到任何你选择的云提供商。
请遵循你的云提供商的指南,与他们一起部署 FastAPI 应用。🤓
独立的 TechEmpower 基准测试显示,在 Uvicorn 下运行的 FastAPI 应用是市面上最快的 Python 框架之一,仅次于 Starlette 和 Uvicorn 本身(FastAPI 内部使用)。(*)
要了解更多信息,请参阅基准测试部分。
FastAPI 依赖于 Pydantic 和 Starlette。
当你在安装 FastAPI 时使用 pip install "fastapi[standard]",它会包含一系列可选的 standard 依赖:
Pydantic 使用的:
email-validator- 用于电子邮件验证。
Starlette 使用的:
httpx- 如果你想使用TestClient,这是必需的。jinja2- 如果你想使用默认的模板配置,这是必需的。python-multipart- 如果你想支持表单“解析”,使用request.form(),这是必需的。
FastAPI 使用的:
uvicorn- 用于加载和提供你的应用程序的服务器。这包括uvicorn[standard],它包含一些(例如uvloop)高性能服务所需的依赖项。fastapi-cli[standard]- 提供fastapi命令。- 这包括
fastapi-cloud-cli,它允许你将 FastAPI 应用程序部署到FastAPI Cloud。
- 这包括
如果你不想包含 standard 可选依赖项,你可以用 pip install fastapi 替换 pip install "fastapi[standard]" 来安装。
如果你想安装 FastAPI 以及标准依赖项,但不包含 fastapi-cloud-cli,你可以用 pip install "fastapi[standard-no-fastapi-cloud-cli]" 来安装。
还有一些你可能想要安装的额外依赖。
额外的可选 Pydantic 依赖:
pydantic-settings- 用于设置管理。pydantic-extra-types- 用于 Pydantic 的额外类型。
额外的可选 FastAPI 依赖:
本项目根据 MIT 许可证条款授权。






















