面试题答案
一键面试1. FastAPI中依赖注入的概念
依赖注入(Dependency Injection)是一种软件设计模式,它允许我们将对象所依赖的其他对象(即依赖项)通过外部传入,而不是在对象内部自行创建。在FastAPI中,依赖注入是一种核心机制,它使我们能够解耦不同部分的代码,使代码更易于测试、维护和复用。
2. 使用场景
- 数据库连接管理:避免在每个API端点重复创建和管理数据库连接,提高性能并防止资源泄漏。
- 身份验证和授权:将身份验证逻辑作为依赖项注入到需要验证用户身份的API端点。
- 公共业务逻辑复用:例如日志记录、数据验证等逻辑,可作为依赖项在多个端点复用。
3. 数据库连接管理示例代码
from fastapi import Depends, FastAPI
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
# 创建数据库引擎
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建数据库会话的依赖项
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
app = FastAPI()
@app.get("/items/")
def read_items(db: Session = Depends(get_db)):
# 使用数据库会话进行数据库操作
result = db.execute("SELECT * FROM items")
items = result.fetchall()
return items
在上述代码中:
get_db
函数是一个依赖项,它创建一个数据库会话,并在请求处理完成后关闭会话,确保资源不会泄漏。- 在
read_items
API端点中,通过db: Session = Depends(get_db)
将数据库会话作为依赖项注入,这样每个请求都可以使用这个数据库会话进行数据库操作,提高了代码的可维护性和性能。