在 FastAPI 中,你可以使用参数注解定义请求参数,并使用函数的返回值定义响应。以下是一些基本的请求和响应示例:

请求参数

路径参数

使用路径参数可以在 URL 中传递参数,例如 /items/{item_id}:
from fastapi import FastAPI

app = FastAPI()

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

查询参数

使用查询参数可以通过 URL 中的查询字符串传递参数,例如 /items/?limit=10:
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
def read_items(limit: int = 10):
    return {"limit": limit}

请求体参数

可以使用请求体参数接收 POST 或 PUT 请求中的数据。FastAPI 支持 JSON 和表单数据:

JSON 请求体
from fastapi import FastAPI, HTTPException

app = FastAPI()

class Item:
    def __init__(self, name: str, description: str = None):
        self.name = name
        self.description = description

@app.post("/items/")
def create_item(item: Item):
    # item 参数将从请求体中自动解析为 JSON 对象
    return {"name": item.name, "description": item.description}

表单数据
from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/login/")
def login(username: str = Form(...), password: str = Form(...)):
    return {"username": username, "password": password}

响应

FastAPI 会根据函数的返回类型自动生成响应文档,并且会验证响应的结构。以下是一些响应的例子:

返回 JSON 数据
from fastapi import FastAPI

app = FastAPI()

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

返回自定义模型
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = None

@app.post("/items/")
def create_item(item: Item):
    return {"name": item.name, "description": item.description}

返回状态码

你可以使用 JSONResponse 来返回自定义状态码:
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id == 42:
        return JSONResponse(content={"message": "Item not found"}, status_code=404)
    return {"item_id": item_id, "message": "Item found"}

这些示例覆盖了 FastAPI 中常见的请求和响应场景。使用这些基本概念,你可以构建出更复杂和功能强大的 API。


转载请注明出处:http://www.zyzy.cn/article/detail/13931/FastAPI