FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 生成,具有异步支持。它基于标准 Python 类型提示,旨在快速开发,并且具有令人惊叹的性能。本指南将带你快速上手 FastAPI,帮助你构建高效的 RESTful API。
安装 FastAPI 和 Uvicorn
首先,你需要安装 FastAPI 和 Uvicorn。Uvicorn 是一个 ASGI 服务器,用于运行 FastAPI 应用。
pip install fastapi uvicorn
创建你的第一个 FastAPI 应用
现在,让我们创建一个简单的 FastAPI 应用。
- 创建项目目录:
mkdir my_fastapi_app
cd my_fastapi_app
- 创建
main.py文件:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
这段代码创建了一个简单的 FastAPI 应用,其中包含一个根路由 /,当访问它时,会返回一条消息 “Hello World”。
- 运行你的应用:
在终端中,运行以下命令来启动应用:
uvicorn main:app --reload
然后,打开浏览器访问 http://127.0.0.1:8000/,你应该会看到 “Hello World” 消息。
构建RESTful API
FastAPI 使构建 RESTful API 变得非常简单。以下是一些构建 API 的关键概念:
路由和操作
在 FastAPI 中,路由由路径和 HTTP 方法(如 GET、POST、PUT 等)定义。每个路由处理函数(例如 read_root)是一个异步函数,可以处理特定的请求。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
在这个例子中,我们定义了一个路由 /items/{item_id},它接受一个名为 item_id 的路径参数,并返回该项目的详细信息。
响应模型
FastAPI 使用 Pydantic 模型来定义响应模型。这些模型可以是 Python 类,它们定义了预期的数据结构。
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
description: str = None
price: float
tax: float = None
使用 Pydantic 模型,我们可以定义预期的响应格式:
@app.post("/items/")
async def create_item(item: Item):
return item
异步支持
FastAPI 是异步的,这意味着它可以同时处理多个请求。在处理数据库操作、I/O 或任何可能阻塞的操作时,异步是非常重要的。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
# 假设我们有一个异步数据库查询
item = await get_item(item_id)
return item
安全性
FastAPI 支持多种安全机制,例如 OAuth2、JWT、密码哈希等。
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.post("/token")
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
user = authenticate_user(username=form_data.username, password=form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token = create_access_token(data={"sub": user.username})
return {"access_token": access_token, "token_type": "bearer"}
总结
通过本指南,你已快速上手 FastAPI 框架,并了解了如何构建高效的 RESTful API。FastAPI 提供了简单、快速且强大的功能,使构建现代 API 变得更加容易。现在,你可以开始使用 FastAPI 开发你的下一个项目了!
