FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 的类型提示功能驱动。它旨在快速开发,同时不需要牺牲性能。本文将带你从零开始,一步步了解并搭建一个高效的 FastAPI API。
快速搭建环境
在开始之前,确保你的计算机上安装了 Python 3.6 或更高版本。接下来,你需要安装 FastAPI 和 Uvicorn(一个 ASGI 服务器)。以下是安装命令:
pip install fastapi uvicorn
创建你的第一个 FastAPI 应用
创建项目结构:创建一个新的目录,用于存放你的项目文件。然后,在该目录下创建一个名为
main.py的 Python 文件。编写你的第一个 FastAPI 应用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello World"}
这段代码创建了一个简单的 FastAPI 应用,其中包含一个根路由,当访问根路由时,会返回一个 JSON 对象,内容为 “Hello World”。
探索路由和依赖注入
FastAPI 使用 Python 类型提示来定义路由和依赖注入,这使得代码更加简洁和易于维护。
路由
在 FastAPI 中,你可以通过装饰器来定义路由。以下是一个示例:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id == 404:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
在这个例子中,我们创建了一个新的路由 /items/{item_id},它接受一个路径参数 item_id。如果 item_id 等于 404,则返回一个 404 错误。
依赖注入
依赖注入是 FastAPI 的一个强大功能,它允许你在处理请求时注入依赖项。以下是一个示例:
from fastapi import FastAPI, Depends
app = FastAPI()
def get_user_token(token: str = Depends()):
# 假设我们有一个函数来验证令牌
return token
@app.get("/items/")
async def read_items(token: str = Depends()):
return {"token": token}
在这个例子中,我们创建了一个名为 get_user_token 的依赖函数,它从请求中提取令牌。然后,我们在 read_items 路由中注入了这个依赖。
集成数据库
FastAPI 可以与多种数据库集成,例如 SQLite、PostgreSQL 和 MongoDB。以下是一个使用 SQLite 的示例:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
import sqlite3
app = FastAPI()
# 定义数据模型
class Item(BaseModel):
id: int
name: str
description: Optional[str] = None
price: float
tax: float = None
# 创建数据库连接
def create_connection():
conn = sqlite3.connect("items.db")
return conn
@app.post("/items/")
async def create_item(item: Item):
conn = create_connection()
cursor = conn.cursor()
cursor.execute("INSERT INTO items (name, description, price, tax) VALUES (?, ?, ?, ?)",
(item.name, item.description, item.price, item.tax))
conn.commit()
return item
@app.get("/items/{item_id}")
async def read_item(item_id: int):
conn = create_connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM items WHERE id = ?", (item_id,))
item = cursor.fetchone()
return item
在这个例子中,我们定义了一个名为 Item 的数据模型,并创建了一个 SQLite 数据库来存储项目。然后,我们创建了两个路由:一个用于创建新项目,另一个用于读取项目。
部署你的 FastAPI 应用
当你准备好部署你的 FastAPI 应用时,你可以使用 Uvicorn 作为 ASGI 服务器。以下是一个部署示例:
uvicorn main:app --reload
这将启动一个开发服务器,并在端口 8000 上监听请求。使用 --reload 选项可以让服务器在代码更改时自动重新加载。
总结
FastAPI 是一个功能强大、易于使用的 Web 框架,适合快速开发高性能的 API。通过本文,你了解了如何快速搭建 FastAPI 应用,探索了路由和依赖注入,以及如何与数据库集成。希望这些信息能帮助你开始你的 FastAPI 之旅!
