FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,使用 Python 编写。它基于标准 Python 类型提示,并且自动提供了交互式 API 文档。以下是快速入门 FastAPI 的基本步骤:
1. 安装 FastAPI 和 Uvicorn
Uvicorn 是一个 ASGI 服务器,用于运行 FastAPI 应用。首先,你需要使用 pip 安装 FastAPI 和 Uvicorn。
pip install fastapi[all]
这个命令会安装 FastAPI 以及所有可选的依赖,包括 Uvicorn。
2. 创建你的 FastAPI 应用
创建一个 Python 文件,例如 main.py
,并编写你的 FastAPI 应用。
from fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"Hello": "World"}@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):return {"item_id": item_id, "q": q}
3. 运行你的应用
使用 Uvicorn 运行你的 FastAPI 应用。
uvicorn main:app --reload
这里 main
是你的 Python 文件名(不带 .py
扩展名),app
是 FastAPI 实例的变量名。
4. 访问你的 API
打开浏览器或使用命令行工具(如 curl)访问 http://127.0.0.1:8000/docs
。你将看到由 FastAPI 自动生成的交互式 API 文档。
5. 添加数据模型
FastAPI 支持使用 Python 类型提示来定义数据模型。
from pydantic import BaseModelclass Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None@app.post("/items/")
def create_item(item: Item):return {"name": item.name, "price": item.price}
6. 使用依赖注入
FastAPI 允许你定义依赖项,并在路径操作函数中自动注入。
from fastapi import Depends, HTTPExceptiondef get_db():db = "fake_database_connection"try:yield dbfinally:db.disconnect()@app.get("/items/", dependencies=[Depends(get_db)])
def read_items(db: str):return {"db": db}
7. 中间件和异常处理
FastAPI 允许你添加中间件和处理异常。
from fastapi import FastAPI, Request
from starlette.exceptions import HTTPException as StarletteHTTPExceptionapp = FastAPI()async def get_query(token: str):if token != "secret":raise HTTPException(status_code=400, detail="Invalid token")return token@app.middleware("http")
async def check_token(request: Request, call_next):token = request.headers.get("X-Token")if token is None or await get_query(token) != "secret":raise StarletteHTTPException(status_code=400, detail="Invalid token")response = await call_next(request)return response@app.get("/items/")
async def read_items():return {"message": "Welcome to the items endpoint"}
8. 测试你的 API
你可以使用 HTTP 客户端(如 httpie 或 Postman)来测试你的 API。
以上是 FastAPI 的基本入门步骤。FastAPI 还有很多高级特性,如请求限流、认证、数据库集成等,你可以根据需要进一步探索。