推荐答案
在 FastAPI 中,定义路由的方式是通过使用装饰器 @app.get()、@app.post()、@app.put()、@app.delete() 等来定义不同的 HTTP 方法的路由。以下是一个简单的示例:
// www.javascriptcn.com code example
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
@app.post("/items/")
def create_item(item: dict):
return {"item": item}在这个示例中:
@app.get("/")定义了一个处理 GET 请求的路由,路径为根路径/。@app.post("/items/")定义了一个处理 POST 请求的路由,路径为/items/。
本题详细解读
1. 路由的基本概念
在 FastAPI 中,路由是指将 HTTP 请求映射到相应的处理函数的过程。每个路由都对应一个特定的 URL 路径和 HTTP 方法(如 GET、POST、PUT、DELETE 等)。
2. 路由的定义方式
FastAPI 使用装饰器来定义路由。常见的装饰器包括:
@app.get(path):定义处理 GET 请求的路由。@app.post(path):定义处理 POST 请求的路由。@app.put(path):定义处理 PUT 请求的路由。@app.delete(path):定义处理 DELETE 请求的路由。
其中,path 是 URL 路径,可以是字符串或包含路径参数的路径。
3. 路径参数和查询参数
FastAPI 支持在路径中使用路径参数和查询参数。例如:
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}在这个示例中:
item_id是路径参数,类型为int。q是查询参数,类型为str,并且是可选的。
4. 请求体和响应模型
FastAPI 支持使用 Pydantic 模型来定义请求体和响应模型。例如:
// www.javascriptcn.com code example
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
def create_item(item: Item):
return item在这个示例中,Item 是一个 Pydantic 模型,用于定义请求体的结构。
5. 异步路由处理
FastAPI 支持异步路由处理函数。例如:
@app.get("/async/")
async def read_async():
return {"message": "This is an async route"}异步路由处理函数使用 async def 定义,适用于处理 I/O 密集型操作。
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在这个示例中,common_parameters 是一个依赖项,通过 Depends 注入到 read_items 函数中。
7. 路由的路径操作
FastAPI 提供了丰富的路径操作功能,包括路径参数、查询参数、请求体、响应模型、依赖注入等,使得路由定义更加灵活和强大。