惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
GRAHAM CLULEY
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
L
LINUX DO - 最新话题
腾讯CDC
博客园 - 三生石上(FineUI控件)
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
博客园 - 叶小钗
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
S
Schneier on Security
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
Hacker News: Ask HN
Hacker News: Ask HN
T
Tenable Blog
V
V2EX
J
Java Code Geeks
AWS News Blog
AWS News Blog
博客园 - 司徒正美
V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
H
Hacker News: Front Page
Security Latest
Security Latest
月光博客
月光博客
The Hacker News
The Hacker News
T
Tor Project blog
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
阮一峰的网络日志
阮一峰的网络日志

博客园 - 一名程序媛呀

Anki插件开发必知必会:钩子函数与右键菜单定制 httpx 传参总报错?这次把 GET、POST、文件上传到响应处理的坑给你一次填平 从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战) 还在 XHR、Fetch 和 Axios 之间纠结?我踩过的坑,希望你一个都不用碰到 你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南 Uvicorn、Gunicorn 傻傻分不清?FastAPI 生产部署避坑指南 Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招! 刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API 别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了 掏出手机就能搭个 WebDAV 同步服务器?这操作有点香 别只盯着GitBook了!这个文档神器让你的笔记秒变网站 写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了 FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好 旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透 写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南) 聊聊 fetch 使用中我踩过的那些坑和正确打开方式 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 告别 Typora 后的新欢:我把所有笔记迁移到了 Obsidian 这个“第二大脑” 你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线 让 FastAPI Agent 思考不阻塞:手把手教你实现异步任务与后台处理方案 让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践 FastAPI Agent 函数调用实战:我让 AI 学会了“自己动手查天气“ 初探:用 FastAPI 搭建你的第一个 AI Agent 接口 FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60% FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治 用了loguru我才明白,Python日志还能这么写 FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项 FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚 FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底 FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上 FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里 我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! FastAPI自动生成的API文档太丑?我花了一晚上把它改成了客户愿意付费的样子 FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南” FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案 FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了! FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍 FastAPI子应用挂载:别再让root_path坑你一夜 FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞! 别再数据线了!用FastAPI 5分钟搭个局域网文件+剪贴板神器 FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香! FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了! FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了! 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南 FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀 FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
告别手写 API 胶水代码:FastAPI 与 Vue 的“契约自动机” OpenAPI 实战
一名程序媛呀 · 2026-04-09 · via 博客园 - 一名程序媛呀

是不是每次前端联调,都觉得自己像个没有感情的“胶水工”?

对着 Swagger 文档,把一个个接口名敲进 axios 里,再把返回值结构小心翼翼地定义成 TypeScript 类型。稍微一个字段名对不上(比如后端把 userId 改成了 userID ),页面就崩得让你怀疑人生。🎯

现在的项目,光是维护那个几百行的 api.ts 文件就耗尽了耐心。直到有一次改了一个 datetime 字段格式没更新前端,页面白屏的那一刻,我悟了——这活儿真不是人干的。

今天,作为一名饱经摧残的程序媛,我想跟你分享一个彻底告别这种“体力活”的方案。让机器去干这种重复劳动,咱们把时间留给摸鱼和解决真正的难题。

📌 核心摘要:这篇文章能帮你省下多少时间?

读完这篇,你将收获一个“一键同步”的前后端协作流。

只要后端 FastAPI 代码写好,前端的 TypeScript 类型声明和接口调用函数就自动生成了。

你只需要关心业务逻辑,再也不用对着文档比对手误。

我们不止讲原理,更提供拿来即用的脚本配置。

🗺️ 内容脉络

  • 第一部分:从“接口对不上”的深夜惨案说起

  • 第二部分:FastAPI 给你的不只是接口,是一本“说明书”

  • 第三部分:在 Vue 项目里施展“无中生有”的魔法

  • 第四部分:那些让你代码更香的避坑指南

💔 第一部分:从“接口对不上”的深夜惨案说起

不知道你有没有经历过这种绝望:后端说“我就改了一个字段名,很小很小的改动”。结果你前端一跑,满屏的 undefined ,控制台红得刺眼。

问题的根源在于,前后端之间缺乏一份强制的、实时的契约。口头约定靠不住,接口文档是静态的死物。我们要的是代码层面的约束力。而 OpenAPI 规范,就是来解决这个的。

⚙️ 第二部分:FastAPI 给你的宝藏——OpenAPI 说明书

好,咱们先来聊聊原理。FastAPI 这个框架最良心的地方,就是它自带生成 OpenAPI JSON 的功能

这就好比你去一家高级餐厅,FastAPI 不仅是那个在后厨炒菜的大厨,它还自动生成了一本实时更新的、格式标准的菜单(OpenAPI JSON)。这本菜单上清清楚楚写着:菜名叫什么(接口路径)、需要什么火候(请求方法)、要放什么配菜(请求参数)、端出来长什么样(返回数据结构)。

你可能会问:“我平时访问的那个 /docs 不就是 Swagger UI 吗?” 没错!那个漂亮的交互页面,其实就是根据这份“菜单 JSON”渲染出来的。而我们今天要做的,就是把这本菜单直接扔给前端一个“聪明的采购员”,让他自动把菜买回来(生成调用代码)。

这里千万别学我当初偷懒,在 FastAPI 里定义了 response_model 却写得马马虎虎。如果你用 Any 或者没写清楚嵌套结构,生成的 OpenAPI 就不准,前端的类型也就跟着错。务必把 Pydantic 模型写得明明白白,这是自动化的基石。

✨ 第三部分:实战!在 Vue 项目里施展魔法

接下来重点来了,怎么把这本“菜单”变成 Vue 里能直接调用的代码?我们需要一个翻译官—— openapi-typescript-codegen

这个工具的选择,好比选螺丝刀,不是最贵的就好,而是要选对口的。在这个场景下,它是专门为 TypeScript 项目打磨的,生成的代码极其干净。

第一步:后端确保能导出 JSON。

启动你的 FastAPI 服务,确保访问 http://localhost:8000/openapi.json 能看到一大串 JSON 数据。

第二步:前端安装依赖并配置脚本。

在 Vue 项目根目录,装上这个神器:

npm install -D openapi-typescript-codegen

然后在 package.json 的 scripts 里加上这条命令:

"gen-api": "openapi --input http://localhost:8000/openapi.json --output ./src/api/generated --client axios"

这里解释一下:
--input 指向你后端给的“菜单”地址,
--output 是代码生成的位置,
--client axios 意思是生成的请求函数基于 axios(如果你的项目用 fetch 可以选 fetch)。

第三步:运行,见证奇迹。

执行 npm run gen-api 。你会发现 src/api/generated 目录下多了一堆文件。打开看看, models 里有你所有的 TypeScript 类型, services 里有封装好的调用类。

你在组件里现在可以这么写,那叫一个丝滑:

import { UserService, type User } from '@/api/generated';

// 直接调,参数和返回值都有完美类型提示!
const userData = await UserService.getUserById(123);

是不是以为这样就完了?且慢,还有坑要填。

🚧 第四部分:注意事项与进阶思考

1. 关于 Axios 实例的拦截器。

生成的代码默认会创建一个基础的 axios 实例。如果你想统一加 Token 或者处理错误,官方文档虽然建议改生成的文件,但根据以往的经验,千万别直接改! 下次一运行生成命令,你的修改全没了。

正确的姿势是:在生成的 OpenAPI 配置里注入你的自定义实例。

2. 生产环境的地址。

上面的命令硬编码了 localhost 。实际项目里,你可以写个脚本,根据环境变量去拉取不同服务器的 openapi.json 。

3. 再说个容易翻车的点:枚举类型。

FastAPI 里的 Python Enum 生成到 TS 端,可能会变成联合类型而不是真正的 Enum 对象。如果你非要用对象枚举,可能得在生成配置里再折腾一下,但联合类型在大多数情况下更好用、更原生。

🎉 总结:让协作回归信任

这套流程跑通之后,那种“后端偷偷改字段”的焦虑感会消失。因为一旦他改了,你运行一下生成命令,TypeScript 编译器就会立刻、准确、无情地告诉你哪里报错了。这比任何沟通工具都高效。

最后啰嗦一句,技术是为了让人更省心,而不是为了炫技。能把这种重复枯燥的工作自动化,才是工程师最大的浪漫。

👋 我是你们的程序媛老朋友,如果你也在前后端联调的泥潭里挣扎过,或者有更好的偷懒技巧,评论区唠唠?

点赞收藏加关注,这种干货要是错过了,下次手写 API 崩溃的时候可别怪我没提醒你哦!🏃‍♀️