推荐答案
在 FastAPI 中,路径操作函数是通过使用 HTTP 方法装饰器来定义的。常见的 HTTP 方法包括 GET
、POST
、PUT
、DELETE
等。以下是一个简单的示例:
from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") def read_item(item_id: int): return {"item_id": item_id}
在这个示例中,@app.get("/items/{item_id}")
定义了一个处理 GET 请求的路径操作函数。路径参数 item_id
会自动传递给函数 read_item
,并且 FastAPI 会自动处理类型转换和验证。
本题详细解读
1. 路径操作函数的基本结构
路径操作函数是 FastAPI 中处理 HTTP 请求的核心部分。它们通常通过装饰器与特定的 HTTP 方法和路径绑定。例如:
@app.get("/items/{item_id}") def read_item(item_id: int): return {"item_id": item_id}
@app.get("/items/{item_id}")
:这是一个装饰器,表示这个函数将处理/items/{item_id}
路径的 GET 请求。item_id: int
:这是一个路径参数,FastAPI 会自动将其转换为整数类型。return {"item_id": item_id}
:函数返回一个 JSON 响应。
2. 支持的 HTTP 方法
FastAPI 支持多种 HTTP 方法,常用的包括:
@app.get()
:处理 GET 请求。@app.post()
:处理 POST 请求。@app.put()
:处理 PUT 请求。@app.delete()
:处理 DELETE 请求。
3. 路径参数和查询参数
路径参数:路径参数是 URL 路径的一部分,通常用于标识资源。例如,
/items/{item_id}
中的item_id
就是一个路径参数。@app.get("/items/{item_id}") def read_item(item_id: int): return {"item_id": item_id}
查询参数:查询参数是 URL 中
?
后面的部分,通常用于过滤或排序。例如,/items/?skip=0&limit=10
中的skip
和limit
就是查询参数。@app.get("/items/") def read_items(skip: int = 0, limit: int = 10): return {"skip": skip, "limit": limit}
4. 请求体和响应模型
FastAPI 还支持定义请求体和响应模型,以便更好地处理复杂的数据结构。
请求体:使用 Pydantic 模型定义请求体。
-- -------------------- ---- ------- ---- -------- ------ --------- ----- ---------------- ----- --- ------------ --- - ---- ------ ----- ---- ----- - ---- -------------------- --- ----------------- ------ ------ ----
响应模型:使用
response_model
参数定义响应模型。@app.post("/items/", response_model=Item) def create_item(item: Item): return item
5. 异步支持
FastAPI 支持异步路径操作函数,只需在函数定义前加上 async
关键字。
@app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id}
6. 依赖注入
FastAPI 支持依赖注入,可以将依赖项注入到路径操作函数中。
from fastapi import Depends def common_parameters(q: str = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") def read_items(commons: dict = Depends(common_parameters)): return commons
通过以上方式,你可以在 FastAPI 中定义路径操作函数,处理各种 HTTP 请求,并利用 FastAPI 的强大功能来简化开发。