FastAPI 学习之路(二十二)依赖项
2023-09-27 14:27:40 时间
FastAPI 提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。
什么是依赖注入?
声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」的一种方式。
然后,由系统(本文中为 FastAPI)负责执行任意需要的逻辑,为代码提供这些依赖(注入依赖项)。
依赖注入常用于以下场景:
-
共享业务逻辑(复用相同的代码逻辑)
-
共享数据库连接
-
实现安全、验证、角色权限
-
等……
上述场景均可以使用依赖注入,将代码重复最小化。
接下来,我们学习一个非常简单的例子,尽管它过于简单,不过很实用。
from typing import Optional from fastapi import Depends, FastAPI app = FastAPI() def common_parameters(q: Optional[str] = None, skip: int = 0, limit: int = 100): return {"q": q, "skip": skip, "limit": limit} @app.get("/items/") def read_items(commons: dict = Depends(common_parameters)): return commons @app.get("/users/") def read_users(commons: dict = Depends(common_parameters)): return commons
我们看下最后的请求
依赖项函数的形式和结构与路径操作函数一样。
因此,可以把依赖项当作没有「装饰器」(即,没有 @app.get("/path")
)的路径操作函数。
依赖项可以返回各种内容。
本例中的依赖项预期接收如下参数:
-
类型为
str
的可选查询参数q
-
类型为
int
的可选查询参数skip
,默认值是0
-
类型为
int
的可选查询参数limit
,默认值是100
然后,依赖项函数返回包含这些值的 dict
。
接收到新的请求时,FastAPI 执行如下操作:
-
用正确的参数调用依赖项函数(「可依赖项」)
-
获取函数返回的结果
-
把函数返回的结果赋值给路径操作函数的参数
FastAPI 兼容性
依赖注入系统如此简洁的特性,让 FastAPI 可以与下列系统兼容:
-
关系型数据库
-
NoSQL 数据库
-
外部支持库
-
外部 API
-
认证和鉴权系统
-
API 使用监控系统
-
响应数据注入系统
文章首发在公众号,欢迎关注。
相关文章
- WPF入门教程系列十二——依赖属性(二)
- vs2013中项目依赖项的作用
- 深入实践Spring Boot2.4.1 Neo4j依赖配置
- python 安装依赖几个问题---HttpScan
- idea maven 仓库中有jar包, 依赖却爆红。
- Java之控制反转和依赖注入
- JetBrains官博:将从IntelliJ平台移除Log4j的依赖
- Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入
- arcgis api 3.x for js 热力图优化篇-不依赖地图服务(附源码下载)
- (4.27)查看存储过程中的依赖关系
- Spring 循环依赖解决方案(只对 setter 注入有效)
- GraphQL Part III: 依赖注入
- 优秀文章 模块依赖