2. 路径参数与类型转换
任务说明
实现一个 FastAPI 接口,通过路径参数接收用户ID,并演示 FastAPI 对路径参数的类型转换与校验能力。接口要求:/users/{user_id},其中 user_id 必须为整数;若传入非整数,接口应返回 422 校验错误。同时增加一个可选路径参数 /users/{user_id}/details/{detail_level},其中 detail_level 限定为 basic 或 full,演示枚举类型校验。
核心代码
from fastapi import FastAPI, Path
from enum import Enum
app = FastAPI()
class DetailLevel(str, Enum):
basic = "basic"
full = "full"
@app.get("/users/{user_id}")
def get_user(user_id: int = Path(..., description="用户ID,必须为整数")):
return {"user_id": user_id, "type": type(user_id).__name__}
@app.get("/users/{user_id}/details/{detail_level}")
def get_user_details(
user_id: int = Path(..., description="用户ID,必须为整数"),
detail_level: DetailLevel = Path(..., description="详情级别:basic 或 full")
):
return {
"user_id": user_id,
"detail_level": detail_level.value,
"detail_type": type(detail_level).__name__
}
类型转换与校验说明
FastAPI 基于 Python 类型注解自动完成以下工作:
- 类型转换:声明
user_id: int后,路径参数"123"会被自动转换为整数123,响应中type字段显示为int。 - 类型校验:若请求
/users/abc,FastAPI 返回 422 错误,提示路径参数无法转换为整数。 - 枚举校验:
detail_level使用DetailLevel枚举类型,请求/users/1/details/advanced时返回 422,仅接受basic或full。
运行与验证
- 安装依赖:
pip install fastapi uvicorn - 保存代码为
main.py,启动服务:uvicorn main:app --reload - 访问
http://127.0.0.1:8000/docs查看自动生成的交互式 API 文档。
验证方法与判定标准
| 测试请求 | 预期状态码 | 预期响应 |
|---|---|---|
GET /users/123 | 200 | {"user_id":123,"type":"int"} |
GET /users/abc | 422 | 校验错误,提示整数类型不匹配 |
GET /users/123/details/basic | 200 | {"user_id":123,"detail_level":"basic","detail_type":"DetailLevel"} |
GET /users/123/details/advanced | 422 | 校验错误,提示不在枚举值范围内 |
通过标准:上述请求返回的状态码与响应体与预期一致,即验证通过。