FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持。它具有异步支持,这意味着它可以同时处理多个请求,而不会阻塞服务器。本文将深入探讨 FastAPI 的关键特性,并提供一些实战技巧,帮助您轻松实现高效的 Web 开发。
快速入门
安装 FastAPI
首先,您需要安装 FastAPI 和 Uvicorn(一个 ASGI 服务器)。您可以使用 pip 来安装它们:
pip install fastapi uvicorn
创建一个简单的 API
以下是一个简单的 FastAPI 应用示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
在这个例子中,我们创建了一个返回 “Hello World” 的基本 API。
FastAPI 的核心特性
类型提示
FastAPI 允许您使用 Python 类型提示来定义请求和响应的数据结构。这使得代码更加易于阅读和维护。
自动文档
FastAPI 会自动生成一个交互式 API 文档,您可以通过访问 /docs 或 /redoc 来查看。
集成数据库
FastAPI 可以与各种数据库集成,如 SQLite、PostgreSQL、MongoDB 等。您可以使用像 Pydantic 这样的库来定义模型。
异步支持
FastAPI 是异步的,这意味着它可以同时处理多个请求。这提高了应用程序的性能。
实战技巧
1. 使用 Pydantic 模型验证
Pydantic 是一个强大的数据验证和设置管理库。您可以使用它来验证请求和响应数据。
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
2. 使用依赖注入
FastAPI 支持依赖注入,这使得您可以在函数中注入数据库连接、配置等。
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas
app = FastAPI()
@app.get("/items/{item_id}", response_model=schemas.Item)
def read_item(item_id: int, db: Session = Depends(get_db)):
item = db.query(models.Item).filter(models.Item.id == item_id).first()
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item
3. 异步视图函数
您可以使用 async 关键字来定义异步视图函数。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
# 模拟异步操作
await asyncio.sleep(1)
return {"item_id": item_id}
4. 跨域资源共享(CORS)
您可以使用 CORS 库来处理跨域请求。
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
5. 性能优化
为了提高性能,您可以使用缓存、异步任务队列等技术。
from fastapi import FastAPI, BackgroundTasks
from celery import Celery
app = FastAPI()
# 配置 Celery
celery_app = Celery(
"tasks", broker="pyamqp://guest@localhost//"
)
@app.post("/tasks/")
async def create_task(background_tasks: BackgroundTasks):
background_tasks.add_task(add, 2, 2)
return {"message": "Task added"}
总结
FastAPI 是一个功能强大、易于使用的 Web 框架。通过掌握其核心特性和实战技巧,您可以轻松实现高效的 Web 开发。希望本文能帮助您在 FastAPI 之旅中取得成功!
