我已经向 aws API 网关部署了一个简单的快速 api。所有端点都工作正常,但是我无法加载 swagger 文档页面,我看到下面的错误
API代码:
from fastapi import FastAPI
from mangum import Mangum
import os
from fastapi.middleware.cors import CORSMiddleware
stage = os.environ.get('STAGE', None)
openapi_prefix = f"/{stage}" if stage else "/"
app = FastAPI(title="MyAwesomeApp",root_path="stage")
@app.get("/")
def get_root():
return {"message": "FastAPI running in a Lambda function"}
@app.get("/info")
def get_root():
return {"message": "TestInfo"}
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
handler = Mangum(app)
我尝试添加根,如下所述 https://fastapi.tiangolo.com/advanced/behind-a-proxy/ 对此的任何帮助将不胜感激。
我找到了我们需要添加的解决方案
root_path="/dev"
就像 app = FastAPI(title=settings.NAME,root_path="/dev")
创建快速 api 应用程序时。此根路径应与 api 网关阶段名称相同。
但是,如果您使用 fastapi 版本控制,则此方法不起作用
正如OP提到的,文档提供了一些示例,说明如何使用阶段名称解决API网关问题。为了灵活性,我认为创建根路径环境变量可能很有用。
ENV=dev
app = FastAPI(title=settings.NAME, root_path=os.environ["ENV"])
同样,您可以通过将环境变量与版本路径连接起来使其适用于多个版本。
root_path=os.path.join("/", os.environ["ENV"], "api/v1")
希望这有帮助!