條件式 OpenAPI¶
如果需要,您可以使用設定和環境變數根據環境條件設定 OpenAPI,甚至完全停用它。
關於安全性、API 和文件¶
在生產環境中隱藏您的文件使用者介面不應該是保護 API 的方法。
這不會為您的 API 增加任何額外的安全性,路徑操作仍然在其所在位置可用。
如果您的程式碼中存在安全漏洞,它仍然會存在。
隱藏文件只會讓理解如何與您的 API 互動變得更加困難,並且可能會讓您在生產環境中更難以除錯。它可以被簡單地視為一種透過隱藏來實現安全性的形式。
如果您想要保護您的 API,您可以做一些更好的事情,例如:
- 確保您為請求主體和回應定義了完善的 Pydantic 模型。
- 使用 dependencies 設定任何所需的權限和角色。
- 永遠不要儲存明文密碼,只儲存密碼雜湊值。
- 實作和使用知名的加密工具,例如 Passlib 和 JWT 令牌等。
- 在需要時,使用 OAuth2 範圍添加更精細的權限控制。
- ...等等。
儘管如此,您可能有一個非常特殊的用例,您真的需要為某些環境(例如生產環境)或根據環境變數的設定停用 API 文件。
根據設定和環境變數設定條件式 OpenAPI¶
您可以輕鬆地使用相同的 Pydantic 設定來設定您產生的 OpenAPI 和文件 UI。
例如:
from fastapi import FastAPI
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
openapi_url: str = "/openapi.json"
settings = Settings()
app = FastAPI(openapi_url=settings.openapi_url)
@app.get("/")
def root():
return {"message": "Hello World"}
這裡我們宣告設定 openapi_url
,其預設值為 "/openapi.json"
。
然後我們在建立 FastAPI
應用程式時使用它。
然後,您可以透過將環境變數 OPENAPI_URL
設定為空字串來停用 OpenAPI(包括 UI 文件),例如:
$ OPENAPI_URL= uvicorn main:app
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
那麼,如果您前往 /openapi.json
、/docs
或 /redoc
的網址,您只會收到 404 Not Found
錯誤,例如:
{
"detail": "Not Found"
}