推荐答案
在 FastAPI 中,路径参数是通过在路径中使用花括号 {} 来定义的。你可以在路径操作函数的参数中声明这些路径参数,FastAPI 会自动将它们解析并传递给函数。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}在这个例子中,item_id 是一个路径参数,FastAPI 会自动将其解析为整数类型,并传递给 read_item 函数。
本题详细解读
路径参数的基本使用
路径参数是 FastAPI 中用于从 URL 中提取值的一种方式。通过在路径中使用花括号 {},你可以定义一个路径参数。FastAPI 会自动将路径中的值解析为相应的类型,并传递给路径操作函数。
例如,在以下代码中:
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}/items/{item_id}定义了一个路径参数item_id。item_id: int指定了item_id的类型为整数。FastAPI 会自动将 URL 中的item_id转换为整数类型。
路径参数的类型转换
FastAPI 支持多种类型的路径参数,包括 int、float、str 等。你可以在路径操作函数的参数中指定路径参数的类型,FastAPI 会自动进行类型转换。
例如:
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}在这个例子中,如果 URL 中的 item_id 是一个有效的整数,FastAPI 会将其转换为整数类型并传递给 read_item 函数。如果 item_id 不是一个有效的整数,FastAPI 会返回一个 422 错误(Unprocessable Entity),表示请求参数无效。
路径参数的顺序
在 FastAPI 中,路径参数的顺序非常重要。FastAPI 会按照路径中定义的顺序来匹配路径参数。
例如:
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: int):
return {"user_id": user_id, "item_id": item_id}在这个例子中,user_id 和 item_id 的顺序必须与路径中的顺序一致。如果顺序不一致,FastAPI 将无法正确解析路径参数。
路径参数的可选值
默认情况下,路径参数是必需的。如果你希望某个路径参数是可选的,可以使用 Optional 类型,并在路径中提供一个默认值。
例如:
from typing import Optional
@app.get("/items/{item_id}")
async def read_item(item_id: Optional[int] = None):
return {"item_id": item_id}在这个例子中,item_id 是一个可选的路径参数。如果 URL 中没有提供 item_id,FastAPI 会将其设置为 None。
路径参数的正则表达式
FastAPI 还支持使用正则表达式来定义路径参数。你可以通过在路径参数后添加正则表达式来限制路径参数的格式。
例如:
@app.get("/items/{item_id:int}")
async def read_item(item_id: int):
return {"item_id": item_id}在这个例子中,item_id 必须是一个整数。如果 item_id 不是一个有效的整数,FastAPI 会返回一个 404 错误(Not Found)。
总结
路径参数是 FastAPI 中非常强大且灵活的功能,允许你从 URL 中提取值并将其传递给路径操作函数。通过合理使用路径参数,你可以构建出更加动态和灵活的 API。