FastAPI Hive:按「业务能力」而非「技术分层」组织你的 FastAPI 应用
FastAPI Hive:按「业务能力」而非「技术分层」组织你的 FastAPI 应用
https://github.com/fanqingsong/fastapi-hive
参考
https://dev.to/codefalconx/fastapi-vs-spring-boot-a-comprehensive-comparison-13ko
https://juejin.cn/post/7649363408022683689
已获取到 GitHub 项目 fastapi-hive 的完整 README(联网抓取成功,原始解析超时的那份已忽略)。下面是一篇可直接发布的技术博客稿。
FastAPI Hive:按「业务能力」而非「技术分层」组织你的 FastAPI 应用
如果你写过稍具规模的 FastAPI 项目,大概率经历过这样的痛苦:改一个业务功能,却要在 routers/、schemas/、services/ 三个目录之间来回横跳。项目越大,这种「代码散落」越严重。
GitHub 上的开源项目 fastapi-hive(作者 fanqingsong,Apache-2.0 协议)给出了一个鲜明的主张:
Organize FastAPI applications around business capabilities, not technical layers. 按业务能力组织 FastAPI 应用,而不是按技术层次。
一、它要解决什么问题
传统 FastAPI 项目多按技术分层组织:
app/
├── routers/ # 所有路由
├── schemas/ # 所有模型
├── services/ # 所有服务
└── main.py
这种布局在小项目时很清晰,但随着功能增多,同一个业务能力的代码被切散到不同技术目录,维护时认知负担陡增。
fastapi-hive 提倡的是一种「能力导向」布局:
app/
├── foundations/ # 共享基础设施
│ ├── auth/
│ └── db/
└── endpoints/ # 每个文件夹 = 一个业务能力
├── heartbeat/
│ ├── router/
│ ├── schema/
│ └── service/
└── house_price/
├── router/
├── schema/
└── service/
一个端点(endpoint)把它的 router、schema、service 乃至可选的数据库模型全部收拢在自己名下,内聚性大幅提升。
二、蜂巢隐喻:一个好懂的心智模型
项目用「蜂巢(hive)」来命名各组件,概念非常直观:
- Endpoints 是「蜜蜂」:每个端点文件夹独立负责一项业务能力,自己挂载路由。
- Foundations 是「蜂巢结构」:鉴权、数据库访问等跨端点共享的关注点,作为可独立初始化的模块存在。
- IoC 框架是「养蜂人」:负责发现模块、执行生命周期钩子、暴露模块状态;端点只需挂载自己的
APIRouter。
带来的直接好处是:main.py 里的注册样板代码更少、职责归属更清晰,模块更易审查、测试、迁移或删除。
三、它是怎么工作的
初始化时 IoCFramework 扫描配置的包路径并导入子模块,随后:
- 发现被装饰的模块,通过 hive 注册表暴露其发布值;
- 注册同步与异步的启动 / 关闭钩子;
- 让每个端点在
startup阶段挂载自己的APIRouter; - 安装请求中间件,在每次请求前后运行 foundation 钩子。
这套生命周期特别适合「只需准备一次的资源」——例如加载一个 ML 模型、建立数据库连接、初始化鉴权提供方——也适合需要绑定到每个请求的资源。
四、核心能力
- 能力导向模块:一个端点的全部代码就近放置。
- 自动发现:从可配置路径加载 foundations 与多个 endpoint 包。
- 显式路由挂载:在
startup中用self.app.include_router(...)挂载各端点路由。 - 生命周期钩子:在应用、模块、请求三个边界运行同步/异步的启动与关闭代码。
- Bean 图与自动配置:
@provides/@component成为定义,HiveContext按类型创建;第三方 starter 通过hive.autoconfigure入口点注册,配合@conditional(on_import、on_missing、on_bean、enabled_when)做条件装配。 - 渐进式接入:只加一小段 bootstrap 代码即可包住现有 FastAPI 应用。
五、快速上手
注意:PyPI 上的包可能落后于仓库,官方推荐从源码安装。
git clone https://github.com/fanqingsong/fastapi-hive.git
cd fastapi-hive
pip3 install .
支持 Python 3.8 ~ 3.13。初始化极简:
from fastapi import FastAPI
from fastapi_hive.ioc_framework import IoCFramework
app = FastAPI(title="My API")
IoCFramework.bootstrap(app)
若 foundations/endpoints 与 main.py 同级,框架会按约定自动发现。也可用 settings= 或 HIVE_* 环境变量覆盖,优先级为:代码 > 环境变量 > 目录约定。
端点侧用一个装饰器把路由挂上去:
@endpoint(name="heart_beat2")
class EndpointHooksImpl(EndpointHooks):
def startup(self):
self.app.include_router(router, prefix="/api/hb2", tags=["heartbeat-v2"])
六、内置示例做了什么
仓库自带的应用演示了几个典型场景:以 foundation 实现的 API-Key 鉴权、以 foundation 实现的数据库初始化与请求级访问、心跳端点、以及 ML 模型预加载 + 房价预测,并演示跨两个 endpoint 包的端点发现。启动后可访问 /docs 查看 OpenAPI 文档,GET /hive/routers 可列出已挂载路由。
七、项目速览
| 项目 | fastapi-hive |
|---|---|
| 仓库 | github.com/fanqingsong/fastapi-hive |
| 一句话定位 | 按业务能力组织 FastAPI 应用(IoC 框架) |
| 语言 | Python 3.8–3.13 |
| 许可证 | Apache-2.0 |
| 标签 | dependency-inversion-principle、fastapi、ioc-framework、machine-learning |
| 提交规模 | 197 commits、4 分支、13 标签、5 位贡献者 |
八、它适合谁
- 团队 FastAPI 项目正在变大、受够了「改一个功能跳三个目录」的人;
- 欣赏依赖倒置 / 关注点分离,想在 Python Web 里引入类似 Spring 的 IoC / 自动配置体验的人;
- 需要在应用启动时预加载 ML 模型、数据库连接等重资源的服务。
一句话总结:fastapi-hive 不是另一个 Web 框架,而是一套让 FastAPI「按业务而非按技术」生长的组织哲学 + IoC 工具。它尊重你原有的 FastAPI 习惯(路由还是普通的 APIRouter),只在你需要更清晰的所有权与更低样板成本时,轻轻托你一把。
如果你希望我把这篇稿子导出为 Word / PDF 文件,或调整篇幅(更短的快讯版 / 更长的深度版)、补充代码示例图示,告诉我即可。

浙公网安备 33010602011771号