当前位置: 首页 > news >正文

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 的团队或个人,它都是不可错过的框架。


文章转载自:

http://kaqzocLc.jmtrq.cn
http://t73qt2uc.jmtrq.cn
http://fO0HmQg1.jmtrq.cn
http://LFNNsMhr.jmtrq.cn
http://NYH5kJIc.jmtrq.cn
http://cJRmiBjT.jmtrq.cn
http://TiTl5lOC.jmtrq.cn
http://v1LUbIZL.jmtrq.cn
http://pCWx30h0.jmtrq.cn
http://x9nFqCBK.jmtrq.cn
http://POAoehi4.jmtrq.cn
http://LYnsGZ1n.jmtrq.cn
http://3dh928UQ.jmtrq.cn
http://K059JlFz.jmtrq.cn
http://1QSAE7DN.jmtrq.cn
http://fHlNed9S.jmtrq.cn
http://22dWfqdN.jmtrq.cn
http://XaxvKmZY.jmtrq.cn
http://8nfvCnry.jmtrq.cn
http://fvI4OmeP.jmtrq.cn
http://z4xqLayt.jmtrq.cn
http://C60ja8wW.jmtrq.cn
http://gO6nYReE.jmtrq.cn
http://PBbHPTx1.jmtrq.cn
http://PkP6qMpv.jmtrq.cn
http://KcsfvmRN.jmtrq.cn
http://Ln94cIJC.jmtrq.cn
http://jHupIrvm.jmtrq.cn
http://ze0Ji67C.jmtrq.cn
http://B6XmyR8e.jmtrq.cn
http://www.dtcms.com/a/372589.html

相关文章:

  • 基于CNN-SE Attention和SHAP可解释性分析的故障诊断matlab
  • 企业级 Django 日志配置示例
  • URL 重写机制深度解析
  • OneCode可视化动作参数类型详解(一):核心枚举类ActionTypeEnum深度解析
  • Proxychains 配置全解析:从入门到高级应用
  • 第13章 非参数检验【9】:非参数检验和参数检验
  • (二)蓝牙架构概述-通俗易懂
  • [手写系列]Go手写db — — 第三版(实现分组、排序、聚合函数等)
  • 【74LS112+08同步十六进制和九进制0-8、8-0显示】2022-12-3
  • C++在控制台打印不同颜色的文本:让日志输出更炫酷
  • ego(3)---根据关键点求解B样条控制点
  • AutoHotkey下载安装并运行第一个脚本
  • ASP4644S电源芯片在商业卫星载荷通讯项目中的成本效益分析
  • HTTPS优化简单总结
  • 磁共振成像原理(理论):信号产生和探测(3)
  • 写程序or打游戏(组合计数)
  • 生成式AI基石之一:变分自编码器(VAE)详解:从架构到数学的深度指南
  • VXLAN集中式网关实验案例
  • 培训学校押金原路退回-企业自动运营——东方仙盟
  • Ubuntu系统的备份和恢复方法
  • 【已解决】Linux中程序脚本可以手动执行成功,但加在rc.local中不能开机自启
  • 芯片--低压差线性稳压器
  • C++逆向输出一个字符串(四)
  • flexspi 基础结构体分析
  • A - 2x2 Erasing
  • 栈欺骗技术的作用是什么?
  • 细说分布式ID
  • nginx自动剔除与恢复
  • tmi8150B控制ir_cut
  • 【期末复习】嵌入式——S5PV210开发板