0%

FastAPI自学教程(75) - WSGI中间件集成

1.基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from fastapi import FastAPI
from fastapi.middleware.wsgi import WSGIMiddleware
from flask import Flask, escape, request

# 创建Flask应用
flask_app = Flask(__name__)

@flask_app.route("/")
def flask_main():
name = request.args.get("name", "World")
return f"Hello, {escape(name)} from Flask!"

# 创建FastAPI主应用
app = FastAPI()

# 挂载Flask应用到指定路径
app.mount("/v1", WSGIMiddleware(flask_app))
  • 通过WSGIMiddleware包装WSGI应用(如Flask/Django)实现集成
  • 使用app.mount()将WSGI应用挂载到特定路径下(如/v1
  • 处理流程:
    graph TD
      A[客户端请求] --> B{路径匹配}
      B -->|匹配/v1前缀| C[WSGIMiddleware处理]
      C --> D[Flask应用响应]
      B -->|其他路径| E[FastAPI原生路由处理]

2.核心特性

2.1 混合架构支持

  • FastAPI原生路由处理异步请求和API文档
  • Flask/Django处理传统同步请求或已有功能模块
  • 示例请求分发:
    • http://localhost:8000/v1/ → Flask响应
    • http://localhost:8000/api → FastAPI响应

2.2 中间件隔离

  • WSGI应用与FastAPI应用配置相互独立
  • 各自维护路由系统、中间件和异常处理器
  • 支持多层嵌套挂载(如/v1/flask下再挂载Django应用)

3.生产环境建议

  1. 部署架构

    1
    gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
    • 使用Gunicorn作为进程管理器,Uvicorn处理ASGI请求
    • 根据CPU核心数设置worker数量(建议4核服务器启动4 workers)
  2. 性能优化

    • FastAPI路由优先处理高频接口
    • 对WSGI应用启用缓存中间件减少计算开销
  3. 迁移策略

    • 逐步将WSGI应用中的关键接口迁移到FastAPI
    • 使用统一反向代理(如Nginx)管理流量分发

测试命令示例:

1
2
3
4
5
6
7
8
# 启动服务
uvicorn main:app --reload --port 8000

# 测试Flask路由
curl http://localhost:8000/v1/?name=FastAPI

# 测试FastAPI路由
curl http://localhost:8000/api