FastAPI入门:一个被裁Java程序员的Python后端自救指南

RAG研究生
2025-12-16 13:29
阅读 753

1. 那个凌晨三点的决定

去年十月,光谷软件园B3栋17楼的灯还亮着。

我盯着电脑屏幕右下角的时间——03:17,手里握着半杯已经凉透的瑞幸。就在三个小时前,HR把我叫进会议室,说“公司战略调整”,我的Java后端岗位被优化了。那天正好是我32岁生日,老婆还在家里等我回去吃蛋糕。

走出公司时,武汉的秋天已经有点冷了。我站在光谷广场地铁口,看着手机银行余额:128,453元。房贷每月6200,房租3500(对,我们在关山大道租了个两居室,还没买房),老婆刚怀孕三个月,产检费用还没算进去。

那一周我面试了7家公司,6家要的是“精通Spring Cloud + 高并发经验 + 熟悉K8s”,剩下那家给的薪资比我现在少3k。最离谱的是,有家创业公司HR问我:“你会写Python吗?我们现在主技术栈是FastAPI。”

FastAPI?那是什么?我当时心里咯噔一下。六年Java开发经验,在大厂写了无数行XML配置和@Service注解,突然告诉我市场变了?

回家路上,我打开招聘网站搜了“FastAPI”,结果跳出来一堆“急招”、“月薪20k起”、“远程可谈”。那一刻,我在光谷步行街的长椅上坐了二十分钟,做了一个决定:转Python后端,从FastAPI开始


2. 为什么是FastAPI?不是Flask或Django?

说实话,一开始我也犹豫过。毕竟Python我只在脚本工具里用过,正经Web框架几乎没碰过。但做了三天调研后,我锁定了FastAPI,原因很现实:

  • 性能接近Node.js,远超传统Python框架:官方benchmark显示,FastAPI处理请求的速度是Flask的3倍以上,这对经历过大促压测的我来说太有吸引力了。
  • 自动生成API文档:Swagger UI开箱即用,再也不用手动写接口文档被产品怼了(别问,问就是血泪史)。
  • 类型提示+Pydantic:作为从Java转过来的人,强类型让我有安全感。写代码时IDE能自动补全、校验参数,减少低级错误。
  • 异步支持原生:async/await直接支持,不用像Flask那样套一层ASGI。

更重要的是——市场需求真旺。我在BOSS直聘上统计过,武汉本地要求FastAPI经验的岗位,平均薪资22k,比同等Java岗高15%。而且很多是ToB SaaS产品或AI初创公司,项目周期短、技术栈新,不像老Java项目动不动就“祖传代码”。


3. 第一个FastAPI项目:从Hello World到产品上线

我给自己定了两周目标:用FastAPI重写之前公司的一个内部工具——一个简单的任务管理系统(Task Manager)。这个系统原本是Spring Boot写的,功能很简单:增删改查任务,按状态过滤。

Day 1:环境搭建 & Hello World

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World from Wuhan!"}

跑起来,访问http://localhost:8000,看到JSON输出那一刻,我居然有点小激动。比Spring Boot启动快太多了!不用等Maven下载依赖,不用看Tomcat日志刷屏。

Day 3:定义数据模型(告别DTO)

在Java里,我得写一个Task实体类,再写一个TaskDTO,还得加Lombok注解。而在FastAPI里,用Pydantic一句话搞定:

from pydantic import BaseModel
from datetime import datetime

class Task(BaseModel):
    id: int
    title: str
    description: str | None = None
    done: bool = False
    created_at: datetime

类型安全、默认值、可选字段——全都声明式搞定。IDE还能根据这个模型自动推断API输入输出结构!

Day 5:自动生成文档,产品再也不骂我了

访问http://localhost:8000/docs,Swagger UI自动出来了!所有接口、参数、示例一目了然。我还记得上个项目,产品经理小李每次验收都说:“你这接口文档又没更新吧?和实际返回的不一样!”

现在?我把/docs链接发给她,她自己点“Try it out”就能测试。上周五晚上她还发微信:“你们Python这么方便的吗?我们下周的新需求能不能也用这个?”

Day 10:接入数据库(SQLAlchemy + 异步)

我用了SQLAlchemy Core + asyncpg,写了个简单的CRUD:

from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession

DATABASE_URL = "postgresql+asyncpg://user:pass@localhost/taskdb"

engine = create_async_engine(DATABASE_URL)

@app.post("/tasks/", response_model=Task)
async def create_task(task: TaskCreate):
    async with AsyncSession(engine) as session:
        db_task = TaskModel(**task.dict())
        session.add(db_task)
        await session.commit()
        await session.refresh(db_task)
        return db_task

虽然异步写法一开始有点绕,但一旦理解了,写高并发接口简直爽飞。上周压力测试,单机QPS跑到1800+,而原来的Java版本才600多。

Day 14:部署上线

用Docker打包,扔到阿里云ECS(2核4G,月付98),Nginx反向代理。整个过程不到两小时。对比之前Java项目打包成jar、配JVM参数、调GC策略……我差点哭出来。


4. 被FastAPI拯救的不止是技术栈,还有心态

说实话,刚开始学的时候我很焦虑。每天晚上哄睡老婆后(孕晚期她睡得早),我就在书房敲代码到凌晨。有次写异步事务死活不回滚,debug到两点,差点砸键盘。

但FastAPI的学习曲线真的很友好。官方文档清晰得像教程,社区示例丰富,连Stack Overflow上的回答都特别新(毕竟2018年才发布,没有历史包袱)。

更重要的是——它让我重新感受到“写代码的乐趣”

在大厂写Java的最后一年,我每天的工作就是:

  • 改一个if条件
  • 加一个日志埋点
  • 联调时等前端联调三小时
  • 开会讨论“要不要加缓存”

而用FastAPI,我能快速把想法变成可运行的产品原型。上周我还帮朋友做了个小程序后端,三天搞定,他请我吃了顿湖锦。


5. 给想转FastAPI的Java程序员几点建议

  1. 别怕“背叛”Java:技术是工具,不是信仰。我在脉脉上看到太多人说“Java才是企业级”,结果简历石沉大海。市场要什么,你就学什么。

  2. 重点学Pydantic和依赖注入:这是FastAPI的灵魂。理解了Request/Response Model和Depends(),你就掌握了80%的开发模式。

  3. 别一上来就搞微服务:FastAPI适合做中小型项目、API网关、AI服务后端。先把单体玩明白,再考虑拆分。

  4. 利用好自动生成文档:这是你和产品、前端沟通的利器。我现在的项目,PRD里直接贴/docs截图。

  5. 接受Python的“动态”:虽然Pydantic提供了类型安全,但Python终究不是Java。学会用mypy做静态检查,别过度追求“完美OOP”。


6. 写在最后:技术人的韧性

今天,我已经入职一家做AI医疗产品的公司三个月了,职位是Python后端工程师,月薪22k(比被裁前高了7k)。团队12个人,6个用FastAPI,产品迭代速度飞快——上周刚上线一个患者随访系统,从需求到上线只用了11天。

昨天和老婆去妇幼做产检,她问我:“后悔转技术栈吗?”

我说:“不后悔。在Java里,我是个螺丝钉;在FastAPI里,我是个造轮子的人。”

技术永远在变,但解决问题的能力不变。FastAPI不会是终点,但它让我在32岁这年,重新找回了对编程的热情。

如果你也在焦虑、迷茫,不妨试试从一个小项目开始。不需要辞职,不需要报班,就用下班后的两小时,写一个能跑起来的API。

因为在这个行业,唯一不变的,就是变化本身。而我们能做的,就是让自己变得更快一点,更灵活一点。

就像FastAPI的那句slogan:Fast to code, fast to run

愿你我都能如此。


作者:光谷某AI医疗公司后端工程师,前大厂Java程序员,现FastAPI重度使用者
坐标:武汉·光谷软件园
现状:娃快出生了,正在用FastAPI写一个孕期记录APP(开源计划中)
联系方式:不公开,但欢迎在评论区交流FastAPI踩坑经验 😄

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝