10 定义路由

在上一篇文章中,我们介绍了FastAPI的工作原理,理解了FastAPI背后的核心概念。现在,我们将深入探讨如何在FastAPI中定义路由,并处理请求。

引入FastAPI

首先,我们需要确保已经安装了FastAPIuvicorn。您可以使用以下命令进行安装:

1
pip install fastapi uvicorn

接下来,我们创建一个简单的FastAPI应用:

1
2
3
from fastapi import FastAPI

app = FastAPI()

定义路由

在FastAPI中,路由是将特定的HTTP请求映射到处理函数的方式。我们可以使用装饰器来定义路由。下面是如何定义一个基本的GET请求的示例:

1
2
3
@app.get("/")
def read_root():
return {"message": "Hello, World!"}

路由参数

FastAPI支持路径参数和查询参数。下面是一个示例,展示如何使用路径参数:

1
2
3
@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来组织路由。以下是一个样例:

1
2
3
4
5
6
7
8
9
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模型来定义请求和响应的格式。下面是一个示例:

1
2
3
4
5
6
7
8
9
10
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异常。例如:

1
2
3
4
5
6
7
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的基础。请保持关注!

作者

IT教程网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论