FastAPI 快速入门:构建高性能 Python Web API
在当今快速发展的软件开发领域,构建高效、可扩展的 Web API 已成为许多项目的核心需求。FastAPI,作为一个基于 Python 的现代、快速(高性能)的 Web 框架,凭借其类型提示支持、自动生成 API 文档以及强大的异步处理能力,迅速赢得了开发者的青睐。本文将为您详细介绍如何快速入门 FastAPI,从环境搭建到基础路由创建,再到数据验证与模型定义,助您迅速掌握这一强大工具。
1. 引言
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框架,专为在 Python 中构建 RESTful API 而设计。它基于标准的 Python 类型提示 (Python 3.8+),并建立在 Starlette (用于 Web 部分) 和 Pydantic (用于数据部分) 之上。
FastAPI 的主要优势包括:
- 高性能:得益于 Starlette 和 Pydantic,FastAPI 在处理请求时表现出色,其速度可与 Go 和 Node.js 等语言相媲美,是目前最快的 Python 框架之一。
- 开发效率高:利用 Python 的类型提示,FastAPI 能够提供出色的编辑器支持、数据验证和自动补全,从而减少错误并显著提高开发速度。
- 自动交互式 API 文档:FastAPI 自动生成符合 OpenAPI 标准的交互式 API 文档,包括 Swagger UI 和 ReDoc,无需额外编写文档。
- 数据验证和序列化:Pydantic 提供了强大的数据模型和验证功能,确保传入和传出数据符合预期格式。
- 异步支持:FastAPI 原生支持 Python 的
async/await语法,使其能够高效处理并发请求,提升性能。
2. 环境准备
在开始之前,请确保您的系统已安装 Python 3.8 或更高版本。同时,pip 包管理器也应已安装并可用。
3. 安装 FastAPI 和 Uvicorn
FastAPI 需要一个 ASGI 服务器来运行,Uvicorn 是推荐的选择。
您可以通过以下命令安装 FastAPI 和 Uvicorn:
bash
pip install "fastapi[all]"
"fastapi[all]" 会安装 FastAPI 及其所有可选依赖,包括 Uvicorn、Pydantic 等,为您提供一个完整的开发环境。如果您希望单独安装,可以使用:
bash
pip install fastapi
pip install "uvicorn[standard]"
4. 第一个 FastAPI 应用
创建一个名为 main.py 的文件,并添加以下代码来创建一个简单的 “Hello World” API:
“`python
from fastapi import FastAPI
创建 FastAPI 应用实例
app = FastAPI()
定义一个处理根路径 (/) 的 GET 请求的路由
@app.get(“/”)
async def read_root():
return {“message”: “Hello, FastAPI!”}
“`
这段代码创建了一个 FastAPI 应用实例,并定义了一个 GET 请求的路由,当访问根路径时,它将返回一个 JSON 响应 {"message": "Hello, FastAPI!"}。
5. 运行应用
使用 Uvicorn 运行您的 FastAPI 应用:
bash
uvicorn main:app --reload
main指的是包含 FastAPI 应用的 Python 文件名 (main.py)。app指的是 FastAPI 应用实例的变量名 (app = FastAPI())。--reload标志会在您的代码发生更改时自动重启服务器,这在开发过程中非常方便。
打开您的浏览器,访问 http://127.0.0.1:8000,您应该会看到 {"message": "Hello, FastAPI!"} 的 JSON 响应。
6. 交互式 API 文档
FastAPI 最强大的功能之一是它能够自动生成交互式 API 文档。
在应用运行期间,访问以下 URL:
* Swagger UI: http://127.0.0.1:8000/docs。
* ReDoc: http://127.0.0.1:8000/redoc。
这些文档页面允许您直接在浏览器中查看、测试您的 API 端点,并提供了详细的请求和响应模型信息,极大地简化了 API 的开发和维护。
7. 路径参数 (Path Parameters)
路径参数是 URL 的一部分,用于识别特定的资源。FastAPI 使用与 Python 格式化字符串相同的语法来声明路径参数。
例如,要获取特定 ID 的商品:
“`python
from fastapi import FastAPI
app = FastAPI()
@app.get(“/items/{item_id}”)
async def read_item(item_id: int):
return {“item_id”: item_id}
“`
在这个例子中,{item_id} 是一个路径参数。FastAPI 会自动将 URL 中对应的值传递给 read_item 函数的 item_id 参数。通过类型提示 item_id: int,FastAPI 会自动验证 item_id 是否为整数,如果不是,则返回验证错误。
8. 查询参数 (Query Parameters)
查询参数是 URL 中 ? 之后的部分,通常用于过滤、排序、分页等可选数据。
例如,获取带可选跳过和限制参数的商品列表:
“`python
from fastapi import FastAPI
app = FastAPI()
@app.get(“/items/”)
async def read_items(skip: int = 0, limit: int = 10):
return {“skip”: skip, “limit”: limit}
“`
在这个例子中,skip 和 limit 是查询参数。它们都有默认值 (0 和 10),这意味着它们是可选的。如果客户端在请求中提供了这些参数,FastAPI 会自动解析并将其传递给函数。
9. 请求体 (Request Body)
当客户端需要向 API 发送数据(例如创建或更新资源)时,通常会使用请求体。FastAPI 结合 Pydantic 提供了强大的请求体处理能力。
首先,定义一个 Pydantic 模型来描述请求体的结构:
“`python
from fastapi import FastAPI
from pydantic import BaseModel
定义一个 Pydantic 模型来表示商品
class Item(BaseModel):
name: str
description: str | None = None # 可选字段
price: float
tax: float | None = None # 可选字段
app = FastAPI()
@app.post(“/items/”)
async def create_item(item: Item):
return item
“`
在这个 POST 请求的例子中,item: Item 告诉 FastAPI 期望请求体是一个符合 Item 模型的 JSON 对象。FastAPI 会自动:
* 读取请求体中的 JSON 数据。
* 使用 Item 模型对数据进行验证。
* 将验证后的数据转换为 Item 类的实例。
* 如果数据无效,则返回清晰的错误信息。
10. 总结
FastAPI 是一个功能强大且易于使用的 Web 框架,非常适合构建高性能的 API。通过本文的快速入门,您应该已经掌握了 FastAPI 的核心概念,包括:
- 高性能:利用 Starlette 和 Pydantic 实现卓越的性能。
- 易用性:通过 Python 类型提示简化开发。
- 自动文档:自动生成交互式 API 文档,提高开发效率。
- 数据验证:Pydantic 提供强大的数据模型和验证功能。
这仅仅是 FastAPI 功能的冰山一角。您可以进一步探索其依赖注入、安全性、WebSocket、后台任务等高级功能,以构建更复杂、更健壮的 Web API。