ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

简易记账 FastAPI 接口开发实践

简易记账 FastAPI 接口开发实践 借助 AI 辅助完成 Web 接口开发重点体现需求拆解、人工代码审查、单元测试与问题排查Python 版本 3.10使用内存列表存储记账流水。一、需求梳理业务需求实现简易记账接口完成新增流水、条件分页查询、时间段收支统计。POST /records新增记账记录字段金额、类型收入 income / 支出 expense、分类、日期校验金额 0、类型合法、日期格式正确错误返回 4xx。GET /records支持按类型、分类、日期筛选带分页。GET /summary输入起止日期返回该区间总收入、总支出、结余。并发说明内存列表线程不安全多请求同时写入会错乱使用threading.Lock加锁保护。验收要点服务正常启动Swagger 文档可访问参数校验生效pytest 包含正常用例与至少 2 个异常用例统计结果计算正确。二、项目目录结构pythonProject/ ├─ main.py # FastAPI主程序 ├─ test_api.py # pytest测试代码 ├─ requirements.txt # 依赖包 └─ README.md # 运行说明main.pyPydantic 模型定义实现三个接口参数校验、业务逻辑。test_api.py使用 TestClient 做接口自动化测试。requirements.txtfastapi、uvicorn、pytest。README.md写安装、启动、测试命令。坑点PyCharm 会记住上次 pytest 的运行配置直接点三角会跑测试而不启动网站。三、核心实现思路数据模型Pydantic 定义请求体做基础校验额外校验类型枚举与日期格式格式错误捕获返回 400。新增接口 POST /records校验通过存入全局列表写入时加线程锁防止并发数据错乱。内存存储特点服务重启数据全部丢失。查询接口 GET /records接收筛选、分页参数先过滤再切片分页返回。统计接口 GET /summary筛选时间范围内记录累加收入、支出计算结余 总收入‑总支出。四、服务启动与网页测试安装依赖pip install -r requirements.txt启动服务不要直接点右上角三角在 main.py 代码区右键 → Run main。启动成功控制台输出Uvicorn running on http://127.0.0.1:8000浏览器访问文档http://127.0.0.1:8000/docs五、遇到的问题与排错总结问题运行 main.py控制台看不到 uvicorn 链接没有启动 web 服务原因PyCharm 缓存上一次 pytest 运行配置哪怕切换文件点绿色三角依旧执行测试脚本。 解决右键 main.py 文件内容选择 Run main而不是直接点右上角三角。问题swagger 文档页面找不到 Try it out 按钮原因已经进入 Try‑it‑out 模式按钮变成 Cancel直接填参数点 Execute 就可以不需要找 Try it out。问题summary 统计支出永远为 0原因虽然提交 POST但是要么提交失败要么服务重启内存清空要么记录日期不在查询的时间区间。排查手段调用 GET /records 查看当前内存真实存在的数据。问题pytest 测试之间数据互相干扰原因全局 records 列表不会自动清空解决方案每个测试函数开头做records.clear()清空数据。
返回列表