FastAPI:像搭建餐厅一样设计API
目录
FastAPI 核心概念
定义与参数说明
请求体
响应体
使用场景
特点
常见操作:代码背后的价值
GET查询用户
POST新增用户
PUT 更新用户
DELETE 删除用户
注意事项:字段校验的机制
总结
你是否有过这样的体验:
写接口的时候,为了数据校验反复加if判断;
前端问“接口文档呢?”,测试问“返回值不对”,而你心里默默想:“我只是写了个接口啊,为什么这么难?”
FastAPI 就像一位聪明而高效的服务员,出现了,它让接口开发变得像写故事一样轻松:
快速 | 性能媲美Node.js、Go |
智能 | 自动校验请求数据,自动生成Swagger文档 |
贴心 | 基于Python类型注解,开发时即可获得自动补全与类型提示 |
一句话总结:FastAPI 让写接口既优雅又高效,让你在后端世界里如鱼得水。
FastAPI 核心概念
在FastAPI中:
- 请求体(Request Body):前端递给后端的数据,就像顾客在餐厅写的点单单子,告诉服务员“我要一份汉堡、一杯可乐”。
- 响应体(Response Body):服务员端上来的菜品,是后端返回给前端的结果。
- HTTP 方法:是你说话的语气,决定了服务员如何处理你的请求:
方法 功能 示例 GET 查询 “帮我看看菜单” POST 新增 “我要点新菜” PUT 更新 “把这道菜换掉” DELETE 删除 “这道菜退掉”
定义与参数说明
以用户管理系统为例,FastAPI 就是服务员:
- 前端通过请求体告诉服务员需求
- FastAPI校验数据、调用数据库,然后通过响应体返回结果
- HTTP方法保证动作清晰、符合RESTful风格。
请求体
from pydantic import BaseModelclass UserCreate(BaseModel):username: strage: intemail: str | None = None
- username:必填字符串
- age:必填整数
- email:可选字符串
响应体
class UserResponse(BaseModel):id: intusername: strage: int
- id:用户唯一标识
- username、age:返回用户信息
使用场景
HTTP方法 | 场景 | 请求体 | 响应体 |
GET | 查询用户信息 | 无 | 有 |
POST | 注册新用户 | 有 | 有 |
PUT | 更新用户信息 | 有 | 有 |
DELETE | 删除用户 | 无 | 有 |
特点
- 请求体自动校验:缺少必填字段报错,多余字段被拒绝
- 响应体自动过滤:只返回模型中定义字段,保证数据干净
- 类型安全:基于 Python 类型注解,开发时自动提示
- 自动文档生成:Swagger UI 和 ReDoc 自动展示接口和数据结构
- RESTful 风格:接口逻辑清晰,易维护
常见操作:代码背后的价值
GET查询用户
@app.get("/users/{user_id}", response_model=UserResponse)
def get_user(user_id: int):return {"id": user_id, "username": "Alice", "age": 20, "extra": "ignored"}
技术角度 | extra字段被过滤,只返回模型字段 |
应用场景 | 用户个人主页、后台管理系统 |
业务价值 | 前端可展示用户资料,管理员查询用户详情 |
查看餐厅菜单,只取需要的菜,不浪费资源。
POST新增用户
@app.post("/users/", response_model=UserResponse)
def create_user(user: UserCreate):return {"id": 1, "username": user.username, "age": user.age}
技术角度 | 请求体校验完整性,响应体隐藏敏感信息 |
应用场景 | 新用户注册、批量导入用户 |
业务价值 | 实现用户注册,保证数据完整且安全 |
点单必须填写完整菜单,厨房才能正确做菜。
PUT 更新用户
@app.put("/users/{user_id}", response_model=UserResponse)
def update_user(user_id: int, user: UserCreate):return {"id": user_id, "username": user.username, "age": user.age}
技术角度 | PUT 覆盖原数据,保证数据库状态一致 |
应用场景 | 修改昵称、年龄或邮箱 |
业务价值 | 支持用户修改信息或管理员调整资料 |
顾客要求重新做一道菜,把原菜替换掉。
DELETE 删除用户
@app.delete("/users/{user_id}")
def delete_user(user_id: int):return {"msg": f"User {user_id} deleted"}
技术角度 | 路径参数唯一标识资源,响应体提供操作提示 |
应用场景 | 用户主动注销、系统清理无效用户 |
业务价值 | 用户注销或管理员删除违规账户 |
退掉不想吃的菜,保持餐厅整洁。
注意事项:字段校验的机制
请求体严格性:
- 缺少必填字段:返回422Unprocessable Entity
- 多余字段:FastAPI拒绝提交
响应体严格性:
- 多余字段:自动过滤
- 缺少字段:报错
请求体像点单,缺了必点菜报错,多点菜不允许;
响应体像端菜,多余的菜不端,少了承诺的菜不能端上桌。
总结
FastAPI 不仅让接口开发高效、安全,还让整个开发流程像讲故事一样生动、有趣。
对于任何想要搭建现代 API 的团队或个人,它都是不可错过的框架。