仅为验证引入FastAPI依赖却不使用返回值是否属于不良实践?
问题解答
这种仅为验证目的引入依赖却不使用返回值的做法不是不良实践,反而完全符合FastAPI的设计思路,甚至是推荐的权限控制方式,原因如下:
- 依赖注入的核心价值之一就是处理副作用逻辑:FastAPI的依赖系统本身就支持这类"执行逻辑、可选返回值"的场景。AdminCurrentUserDep的核心作用是验证用户身份权限,只要它能在接口执行前完成验证并在失败时抛出错误,即使不使用返回的admin_user对象,也是合理的用法。
- 可读性更强:把权限依赖放在接口参数列表里,其他开发者扫一眼函数签名就能立刻知道这个接口需要管理员权限,不需要深入函数体查找内部调用的验证逻辑,权限要求一目了然。
- 复用性更高:这种依赖可以直接在所有需要管理员权限的接口中复用,不用每个接口都重复写一遍内部调用验证函数的代码,符合DRY(Don't Repeat Yourself)原则。
至于是否要改为在接口内部显式调用验证函数?完全没必要,除非你的验证逻辑需要依赖接口内部生成的参数(比如当前请求的业务数据),否则参数声明的方式在可读性、复用性上都更优。
如果觉得参数列表里的admin_user变量名容易让人误解(以为会被使用),可以用下划线_作为变量名,明确表示这个依赖的返回值不需要被使用,代码会更清晰:
@router.post( "/", response_model=GenreOutDTO, status_code=status.HTTP_201_CREATED ) async def create_genre( genre: GenreInDTO, genre_service: GenreServiceDep, _: AdminCurrentUserDep # 下划线明确标记返回值无需使用 ): return await genre_service.create_genre(genre=genre)
内容的提问来源于stack exchange,提问作者Smile1
相关产品推荐
相关产品推荐

