10 FastAPI教程:定义路由
在上一篇文章中,我们介绍了FastAPI的工作原理,理解了FastAPI背后的核心概念。现在,我们将深入探讨如何在FastAPI中定义路由,并处理请求。
引入FastAPI
首先,我们需要确保已经安装了FastAPI
和uvicorn
。您可以使用以下命令进行安装:
pip install fastapi uvicorn
接下来,我们创建一个简单的FastAPI应用:
from fastapi import FastAPI
app = FastAPI()
定义路由
在FastAPI中,路由
是将特定的HTTP请求映射到处理函数的方式。我们可以使用装饰器来定义路由。下面是如何定义一个基本的GET请求的示例:
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
路由参数
FastAPI支持路径参数和查询参数。下面是一个示例,展示如何使用路径参数:
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
在这个示例中,我们定义了一个路由/items/{item_id}
,其中item_id
是一个路径参数。q
是一个可选的查询参数。
路由分组
在实际应用中,您可能需要将路由分组。例如,可以使用APIRouter
来组织路由。以下是一个样例:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/{user_id}")
def read_user(user_id: int):
return {"user_id": user_id}
app.include_router(router, prefix="/api/v1")
通过这种方式,我们将用户相关的路由组织在一个路由器下,并在访问时添加了前缀/api/v1
。
响应模型
为了更好地处理返回的数据,FastAPI允许我们定义响应模型。我们可以使用Pydantic
模型来定义请求和响应的格式。下面是一个示例:
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
description: str = None
@app.post("/items/")
def create_item(item: Item):
return item
在这个例子中,Item
类定义了请求的格式,而create_item
函数会接收一个Item
对象作为参数,当POST请求到/items/
时,会返回相同的对象。
错误处理
FastAPI也提供了错误处理的功能。如果我们需要处理特定的错误,我们可以抛出HTTP异常。例如:
from fastapi import HTTPException
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id < 0:
raise HTTPException(status_code=400, detail="Item ID must be greater than or equal to 0")
return {"item_id": item_id}
这段代码在item_id
小于0时会返回一个400 Bad Request的错误响应。
小结
在这一部分中,我们学习了如何在FastAPI中定义路由以及处理HTTP请求。通过使用FastAPI,我们能够快速实现功能强大且易于维护的API结构。我们定义了简单的路由、带有路径和查询参数的路由、分组路由、响应模型以及错误处理方法。
在下一篇文章中,我们将继续讨论如何使用HTTP方法,包括GET、POST、PUT和DELETE等,它们是构建RESTful API的基础。请保持关注!