快速了解FastAPI
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持。它具有异步支持,这意味着它可以同时处理多个请求,而不会阻塞。FastAPI 是基于 Starlette 和 Pydantic 的,这两个库分别用于 Web 框架和数据处理。
快速上手FastAPI
安装FastAPI
首先,你需要安装 FastAPI 和 Uvicorn,Uvicorn 是一个 ASGI 服务器,用于运行 FastAPI 应用。
pip install fastapi uvicorn
创建第一个FastAPI应用
创建一个新的 Python 文件,例如 app.py,并添加以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
运行你的FastAPI应用
在终端中,运行以下命令来启动你的应用:
uvicorn app:app --reload
这将启动一个本地服务器,默认情况下是 http://127.0.0.1:8000/。
测试你的API
在浏览器中访问 http://127.0.0.1:8000/,你应该会看到以下响应:
{
"message": "Hello World"
}
使用Pydantic进行数据验证
FastAPI 与 Pydantic 集成,可以让你轻松地进行数据验证。以下是一个使用 Pydantic 模型的示例:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
现在,你可以发送一个 POST 请求到 /items/,并包含一个 JSON 对象,FastAPI 将自动验证数据:
{
"name": "Foo",
"price": 42.0
}
使用依赖注入
FastAPI 支持依赖注入,这意味着你可以将服务或对象注入到你的路由中。以下是一个使用依赖注入的示例:
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas
app = FastAPI()
# 创建数据库模型
models.Base.metadata.create_all(bind=engine)
@app.post("/items/")
async def create_item(item: schemas.Item, db: Session = Depends(get_db)):
# 将数据保存到数据库
db_item = models.Item(**item.dict())
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
使用中间件
中间件是处理 HTTP 请求和响应的函数。以下是一个简单的中间件示例,它打印出请求的路径:
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def log_requests(request: Request, call_next):
print(f"Path: {request.path}")
response = await call_next(request)
return response
部署FastAPI应用
当你准备好部署你的 FastAPI 应用时,你可以使用 Uvicorn、Gunicorn 或其他 ASGI 服务器。以下是一个使用 Gunicorn 部署应用的示例:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
这将启动一个 Gunicorn 服务器,它将监听 0.0.0.0 上的端口 8000,并使用 4 个工作进程。
总结
FastAPI 是一个功能强大的 Web 框架,它可以帮助你快速构建高性能的 API。通过本教程,你了解了如何创建基本的 FastAPI 应用,使用 Pydantic 进行数据验证,使用依赖注入,以及如何部署你的应用。希望这个教程能帮助你快速上手 FastAPI!
