FastAPI 是一个现代、快速(通过使用 Starlette 和 Pydantic),并且基于标准 Python 类型提示的 Web 框架。它设计用于构建高性能的 API,同时保持简洁和易用。
以下是 FastAPI 的一些关键特点和详解:
1. 安装 FastAPI:
使用以下命令通过 pip 安装 FastAPI:
pip install fastapi
2. 创建一个 FastAPI 应用:
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, query_param: str = None):
return {"item_id": item_id, "query_param": query_param}
在上述例子中:
FastAPI()
创建了一个 FastAPI 应用实例。@app.get("/")
装饰器定义了处理根路径的视图函数read_root()
。@app.get("/items/{item_id}")
装饰器定义了处理路径中包含变量item_id
的视图函数read_item()
。
3. 路径参数和查询参数:
FastAPI 使用类型提示来声明路径参数和查询参数,它自动解析和验证输入。路径参数通过花括号 {}
定义,查询参数通过函数参数声明。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, query_param: str = None):
return {"item_id": item_id, "query_param": query_param}
在上述例子中,item_id
是路径参数,query_param
是查询参数。FastAPI 会自动解析并验证参数的类型。
4. 请求体和响应体:
FastAPI 支持 JSON 请求体和响应体,通过使用 Pydantic 模型来定义数据结构。
from fastapi import FastAPI, Body
app = FastAPI()
class Item:
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item, additional_param: str = Body(..., embed=True)):
return {"item": item, "additional_param": additional_param}
在上述例子中,Item
类定义了请求体的结构,create_item()
视图函数使用了 Item
类型的参数。Body(..., embed=True)
表示 additional_param
参数是一个嵌套在请求体中的额外参数。
5. 异步支持:
FastAPI 使用异步(async/await)支持,可以编写异步的视图函数和请求处理。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
在上述例子中,async def
定义了一个异步视图函数。
6. 文档自动生成:
FastAPI 自动生成交互式 API 文档,支持 Swagger UI 和 ReDoc。可以通过访问 /docs
和 /redoc
路径查看文档。
7. 依赖注入:
FastAPI 支持依赖注入,可以通过声明参数的方式将依赖项注入到视图函数中,例如数据库连接、认证信息等。
from fastapi import FastAPI, Depends
app = FastAPI()
def get_query_param(query_param: str = None):
return query_param
@app.get("/")
def read_root(query_param: str = Depends(get_query_param)):
return {"query_param": query_param}
在上述例子中,Depends(get_query_param)
注入了 get_query_param
函数的返回值作为 query_param
参数。
FastAPI 提供了许多其他功能,如 WebSocket 支持、Cookie 和 Header 解析、安全性支持等。它是一个功能强大且易于使用的现代 Web 框架,特别适用于构建高性能的 API。