如何在FastAPI接口中同时使用必填和可选路径参数?
实现方案
FastAPI中要实现可选路径参数,有两种常用的可行方式:
方案1:注册双路由(全版本兼容,最稳妥)
给同一个视图函数绑定两个路由规则,分别对应带可选参数和不带可选参数的场景,代码修改如下:
# 先注册不带financialColumn的路由,对应默认参数场景 @app.get("/company/{company_ticker}/model", dependencies=[Depends(api_counter)]) # 再注册带financialColumn的路由,对应传参场景 @app.get("/company/{company_ticker}/model/{financialColumn}", dependencies=[Depends(api_counter)]) async def myendpoint( company_ticker: str, # 保留默认值配置即可 financialColumn: Optional[str] = 'netincome', ... ): myFunction(company_ticker, financialColumn)
这种方式不需要依赖FastAPI的版本,匹配逻辑清晰,不会出现路径匹配冲突。
方案2:高版本FastAPI原生支持(v0.73.0及以上)
如果你的FastAPI版本足够新,可以直接在路径参数声明时配置默认值,无需额外注册路由:
@app.get("/company/{company_ticker}/model/{financialColumn}", dependencies=[Depends(api_counter)]) async def myendpoint( company_ticker: str, financialColumn: str = 'netincome', ... ): myFunction(company_ticker, financialColumn)
注意:使用该方案时必须保证可选路径参数放在整个路径的最后一位,否则会出现路径匹配混乱的问题。
两种方案都可以实现你要的效果:用户访问/company/xxx/model时,financialColumn自动取默认值netincome;访问/company/xxx/model/[自定义参数]时,取用户传入的自定义值。
内容的提问来源于stack exchange,提问作者Lostsoul
相关产品推荐
相关产品推荐

