目录

  1. 路由基础概述
  2. 定义基本路由
  3. 路由参数
  4. 响应模型
  5. 参考资料

1. 路由基础概述

在 FastAPI 中,路由是用来处理特定 URL 路径的 HTTP 请求。FastAPI 通过装饰器(如 @app.get()@app.post() 等)来定义路由和关联的请求方法。每个路由处理一个 HTTP 请求,并且可以定义不同的请求类型(如 GET、POST、PUT、DELETE 等)。

FastAPI 会自动为这些路由生成相应的文档(如 Swagger UI 和 ReDoc),并且支持路径参数、查询参数、请求体等。


2. 定义基本路由

2.1 GET 请求

GET 请求是最常见的 HTTP 请求方法之一,用于请求数据。在 FastAPI 中,使用 @app.get() 来定义一个 GET 请求的路由。

from fastapi import FastAPI

app = FastAPI()

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

在上面的代码中,@app.get("/") 定义了一个根路由,当访问 http://127.0.0.1:8000/ 时,会返回 {"message": "Hello, World!"} 的 JSON 响应。

2.2 POST 请求

POST 请求通常用于提交数据。在 FastAPI 中,使用 @app.post() 来定义一个 POST 请求的路由。

@app.post("/items/")
def create_item(item: dict):
    return {"item": item}

此路由接收一个 POST 请求并接受一个 JSON 请求体。item 是一个字典(Python 的 dict),FastAPI 会自动将 JSON 数据解析为字典。你可以通过 POST 请求向 http://127.0.0.1:8000/items/ 提交数据。

2.3 PUT 请求

PUT 请求用于更新资源。在 FastAPI 中,使用 @app.put() 来定义一个 PUT 请求的路由。

@app.put("/items/{item_id}")
def update_item(item_id: int, item: dict):
    return {"item_id": item_id, "updated_item": item}

此路由通过 PUT 请求更新一个特定 ID 的项,item_id 通过路径参数传递,item 是请求体中的数据。

2.4 DELETE 请求

DELETE 请求用于删除资源。在 FastAPI 中,使用 @app.delete() 来定义一个 DELETE 请求的路由。

@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    return {"message": f"Item {item_id} has been deleted."}

此路由通过 DELETE 请求删除特定 ID 的项。


3. 路由参数

3.1 路径参数

路径参数是通过 URL 中的动态部分来传递的值。例如,在 /items/{item_id} 中,item_id 是路径参数。

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

上面的代码定义了一个 GET 请求的路由,当访问 /items/{item_id} 时,item_id 会作为路径参数传递给 read_item 函数。

3.2 查询参数

查询参数通过 URL 中的 ?key=value 的形式传递。例如,http://127.0.0.1:8000/items/?q=search_term。在 FastAPI 中,可以通过函数参数来获取查询参数。

@app.get("/items/")
def read_item(q: str = None):
    return {"q": q}

如果在 URL 中访问 /items/?q=search_termq 参数的值将传递给 read_item 函数。


4. 响应模型

FastAPI 还支持为响应定义模型,使用 Pydantic 模型来验证响应数据。响应模型帮助确保返回的数据符合特定的格式。

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

@app.get("/items/{item_id}", response_model=Item)
def read_item(item_id: int):
    return {"name": "Sample Item", "price": 12.99}

在这个示例中,Item 是一个 Pydantic 模型,用于定义返回数据的格式。路由 /items/{item_id} 将返回一个符合 Item 模型的数据。


5. 参考资料

出站链接

站内链接