1 概述
- 之前也使用过 django + django-rest-framework 进行开发,但我始终感觉代码写的不流畅;后来使用 fastapi ,才发觉 web 开发就应该是这样才对。
2 fastapi 项目组织结构
- 目录结构:
├── apps # 应用模块
│ ├── auth # auth 应用模块
│ │ ├── router # 路由接口模块
│ │ └── service # service 模块,与接口模块逻辑分离
│ ├── cmdb
│ │ ├── router
│ │ └── service
│ ├── findata
│ │ ├── router
│ │ └── service
│ ├── task
│ │ ├── router
│ │ └── service
│ └── third
│ ├── router
│ └── service
├── config # 配置文件
├── core # 核心模块,比如项目所需的通用 crud.py
│ └── security
├── data # 数据模块,目前主要存储了测试环境的 sqlite 数据库
├── logs # 日志目录
├── scripts # 项目所需的脚本目录
├── static
└── utils # 工具库模块,主要是外部一些工具库
2.1 目录结构说明
- 参看上方备注;
2.2 其他要点
- 建议每个业务模块使用单独的目录,比如 auth、cmdb、findata、task、third 等;通过配置文件决定 fastapi 加载哪些业务模块;
- crud 建议使用全局的 crud.py,避免重复代码;个别业务需要复杂
sql
,可以在 service 目录单独实现; - config 目录可以配置一个
.env
文件,用于区分 prod 和 dev 环境; - 每个 fastapi 项目建议使用项目目录下的
.venv
目录,用于隔离项目依赖; - 服务可以使用
systemd
进行进程管理;
# ln -s /opt/xops/config/xops.service /etc/systemd/system/xops.service
[Unit]
Description=xops service develop with fastapi
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/xops
ExecStart=/opt/xops/.venv/bin/uvicorn main:app --host 127.0.0.1 --port 18000 --workers 8 --log-config config/uvicorn.json
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
3 fastapi 常用工具库推荐
优先使用 github 中 star 多的工具库;
- orm : sqlalchemy
- 身份验证 authentication : passlib + jose
- 授权控制 Authorization : casbin
- 异步任务 : celery + redis
- 部署接口 : ansible-runner