Skip to content

PLUCK823/microservice-fastapi-test

Repository files navigation

FastAPI 微服务实战:用户认证与业务服务配套代码

✨ 项目亮点

  • 用户服务独立化:基于 FastAPI Users,实现用户注册、登录、JWT 认证。

  • 业务服务隔离:Todo Service 仅处理业务逻辑,通过调用 User Service 验证用户身份。

  • 统一鉴权:业务服务通过 Redis 缓存 + User Service 校验实现高效鉴权。

  • 清晰分层架构:采用 Repository - Service - Router 模式,业务逻辑与数据库访问解耦。

  • 现代化技术栈

    • FastAPI 0.115+
    • SQLAlchemy 2.0 (异步)
    • Redis 5 (缓存/会话)
    • Docker + uv 打包
  • 可扩展性:支持拆分为更多业务微服务,并通过 API Gateway(如 Traefik)进行统一入口管理。


📂 项目结构

microservice/
├── user_service/   # 用户认证微服务
│   ├── src/
│   │   ├── core/   # 配置、数据库、生命周期管理
│   │   └── users/  # 用户模型、Schema、路由
│   └── Dockerfile
│
├── todo_service/   # 待办事项业务微服务
│   ├── src/
│   │   ├── core/   # 配置、认证、数据库、依赖注入
│   │   └── todos/  # 待办业务的模型、仓库、服务、路由
│   └── Dockerfile
│
├── pyproject.toml  # 工作区管理(uv workspace)
└── .gitignore

🚀 快速启动

1. 克隆项目

git clone https://github.com/PLUCK823/microservice
cd microservice

2. 本地运行(uv)

进入用户服务:

cd user_service
uv run fastapi dev src/main.py --port 8000 --reload

进入待办服务:

cd todo_service
uv run fastapi dev src/main.py --port 8001 --reload

3. Docker 启动

方式一:使用 Docker Compose(推荐)

在项目根目录执行:

# 启动所有服务(Redis + User Service + Todo Service)
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止所有服务
docker-compose down

# 停止并删除数据卷
docker-compose down -v

方式二:单独构建镜像

重要: 由于使用了 uv workspace,必须在项目根目录(microservice)执行构建命令:

# 在 microservice 根目录下执行
docker build -f user_service/Dockerfile -t user-service .
docker build -f todo_service/Dockerfile -t todo-service .

# 先启动 Redis
docker run -d --name redis -p 6379:6379 redis:7-alpine

# 启动用户服务
docker run -d --name user-service -p 8000:8000 user-service

# 启动业务服务(需要连接 Redis 和 User Service)
docker run -d --name todo-service -p 8001:8001 \
  -e REDIS_HOST=redis \
  -e USER_SERVICE_URL=http://user-service:8000 \
  --link redis:redis \
  --link user-service:user-service \
  todo-service

4. 验证

  • 打开用户服务:http://127.0.0.1:8000/docs
  • 打开业务服务:http://127.0.0.1:8001/docs

🔑 使用流程

  1. 注册用户 调用 POST /auth/register(User Service)

  2. 登录获取 Token 调用 POST /auth/jwt/login(User Service)

  3. 携带 Token 访问业务接口 例如:

    • POST /lists 创建待办清单
    • POST /todos 添加待办事项 (Todo Service 会通过 Redis + User Service 验证 Token)

🛠️ 技术要点

  • User Service

    • FastAPI Users + SQLAlchemy 实现用户注册、登录、认证。
    • JWT 存储于数据库 AccessToken 表,支持失效控制。
  • Todo Service

    • 独立数据库(SQLite/SQLAlchemy)。
    • OAuth2 + User Service 远程校验 + Redis 缓存用户信息。
    • Repository 层负责数据库操作,Service 层封装业务逻辑,Router 提供 RESTful API。

About

Fastapi微服务的一个Test-Demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published