middleware or dependency

官方说明

场景:

项目使用了sqlite+sqlalchemy,暂时不支持async方式访问,但是fastapi的middleware的 __call__ 方法必须是async,如果在middleware中去做用户会话管理等和db相关的io操作可能导致整个应用阻塞。

解决:

使用def的dependency组合完成相关操作

官方对于两个组件的对比说明:

  • middleware
    • 代码多一些,更复杂一些
    • 必须是async方法
    • 任何需要IO代码的添加都可能导致整个应用速度变慢或者阻塞
    • 每个请求都会执行相关代码,如果是db的话,即使路由函数不需要也会创建