完全同意!其实每个框架都有自己的“坑”,FastAPI 在营销上做得很好(号称“现代、快速”),但实际使用中确实有不少痛点:
FastAPI 常见问题:
-
过度依赖 Pydantic
-
数据验证和序列化都绑死在 Pydantic 上
-
复杂嵌套序列化很痛苦
-
和数据库模型经常需要重复定义
-
-
异步的复杂性
-
混合同步/异步代码时的性能陷阱
-
需要理解 asyncio 的细节才能用好
-
很多库还不支持异步
-
-
生态不完整
-
没有 Django Admin 这样的管理后台
-
权限系统需要从头搭建
-
缺少 DRF 那样的成熟第三方包生态
-
-
项目结构混乱
-
没有约定俗成的项目结构
-
团队协作容易各写各的
-
大型项目组织困难
-
DRF 的实际优势:
# 一个完整的 CRUD + 权限 + 分页 + 过滤,DRF 几行搞定 class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductSerializer permission_classes = [IsAuthenticated, IsOwnerOrReadOnly] filter_backends = [DjangoFilterBackend, SearchFilter] filterset_fields = ['category', 'status'] search_fields = ['name', 'description'] pagination_class = PageNumberPagination # FastAPI 要实现同样的功能,代码量可能是3-5倍
实际开发中的痛点对比:
| 需求 | DRF | FastAPI |
|---|---|---|
| 后台管理 | ✅ Django Admin 秒出 | ❌ 需要自己造轮子 |
| 用户认证 | ✅ Session/Token/JWT 全有 | ❌ 需要整合各种包 |
| 权限控制 | ✅ 基于对象/基于角色都有 | ❌ 自己实现 |
| API 文档 | ✅ drf-spectacular 很好用 | ✅ 原生支持(唯一明显优势) |
| 开发速度 | ✅ 快速原型 | ⚠️ 每个组件都要选型 |
| 团队协作 | ✅ 结构统一 | ⚠️ 容易各行其是 |
我的建议:
继续用 DRF,如果你:
-
已经熟悉 Django 生态
-
需要快速交付项目
-
项目需要管理后台
-
团队规模较大,需要规范
考虑 FastAPI,只有当:
-
项目是纯 API 微服务
-
团队精通异步编程
-
确实需要极致性能(大多数业务场景并不需要)
-
愿意为每个功能都自己造轮子或仔细选型
折中方案:用更现代的 DRF
# 安装一些让 DRF 更强大的包 pip install drf-spectacular # 更好的 API 文档 pip install django-filter # 强大的过滤 pip install djangorestframework-simplejwt # JWT 支持 pip install django-debug-toolbar # 性能调试
一个真实案例:
我曾经有一个项目从 DRF 切换到 FastAPI,因为“性能更好”。结果:
-
开发时间增加了 40%
-
需要自己实现权限系统
-
缺少管理后台,运营团队抱怨
-
异步数据库连接池问题折腾了一周
-
最后性能提升不到 10%(因为瓶颈在数据库)
结论: 技术选型要看实际需求,而不是盲目追求“新”和“快”。DRF 经过多年实战检验,生态完整,开发效率高,对于大多数业务场景完全够用。
你现在主要做什么类型的项目?也许我们可以探讨如何在 DRF 框架下解决你遇到的特定问题。