FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Python Web 框架,它基于 Python 3.7+ 的类型提示,使用 Starlette 作为 ASGI 应用程序框架。以下是关于 FastAPI 的详细介绍:
特点
- 快速:FastAPI 具有非常高的性能,可与 NodeJS 和 Go 媲美。这得益于其基于 Starlette 和 Pydantic 构建,并且使用了异步编程。
- 易于使用:利用 Python 的类型提示,FastAPI 可以自动生成交互式 API 文档,减少了手动编写文档的工作量。同时,它的代码结构清晰,易于理解和维护。
- 类型安全:通过 Python 的类型提示,FastAPI 可以在编译时进行类型检查,减少运行时错误。
- 自动文档:FastAPI 会自动生成 Swagger UI 和 ReDoc 风格的 API 文档,方便开发人员和测试人员进行接口测试和调试。
- 依赖注入:支持依赖注入,使得代码的复用和测试更加方便。
- 异步支持:完全支持异步编程,可以处理高并发请求。
安装
可以使用 pip 来安装 FastAPI:
pip install fastapi[all]
[all]
表示安装所有可选依赖,包括用于运行服务器的 Uvicorn。
简单示例
以下是一个简单的 FastAPI 应用示例:
from fastapi import FastAPI
# 创建一个 FastAPI 应用实例
app = FastAPI()
# 定义一个 GET 请求的路由
@app.get("/")
def read_root():
return {"Hello": "World"}
# 定义一个带有路径参数的 GET 请求的路由
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
运行应用
使用 Uvicorn 来运行 FastAPI 应用:
uvicorn main:app --reload
这里 main
是 Python 文件名(如果文件名为 main.py
),app
是 FastAPI 应用实例的名称。--reload
选项用于在代码修改时自动重启服务器。
访问 API 文档
启动应用后,可以通过以下 URL 访问自动生成的 API 文档:
- Swagger UI:http://127.0.0.1:8000/docs
- ReDoc:http://127.0.0.1:8000/redoc
数据库集成
FastAPI 可以与各种数据库集成,例如 SQLAlchemy(用于关系型数据库)和 Motor(用于 MongoDB)。以下是一个使用 SQLAlchemy 与 SQLite 数据库集成的示例:
from fastapi import FastAPI
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 数据库配置
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# 定义数据库模型
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
# 创建数据库表
Base.metadata.create_all(bind=engine)
# 创建 FastAPI 应用实例
app = FastAPI()
# 依赖项,用于获取数据库会话
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# 定义一个 POST 请求的路由,用于创建新的 item
@app.post("/items/")
def create_item(name: str, db = Depends(get_db)):
item = Item(name=name)
db.add(item)
db.commit()
db.refresh(item)
return item
总结
FastAPI 是一个功能强大、易于使用的 Python Web 框架,适合用于构建高性能的 API。它的类型安全、自动文档和异步支持等特性使得开发人员可以更加高效地开发和维护 API。