Bedingte OpenAPI¶
Bei Bedarf können Sie OpenAPI mithilfe von Einstellungen und Umgebungsvariablen abhÀngig von der Umgebung bedingt konfigurieren und sogar vollstÀndig deaktivieren.
Ăber Sicherheit, APIs und Dokumentation¶
Das Verstecken Ihrer DokumentationsoberflĂ€chen in der Produktion sollte nicht die Methode sein, Ihre API zu schĂŒtzen.
Dadurch wird Ihrer API keine zusĂ€tzliche Sicherheit hinzugefĂŒgt, die Pfadoperationen sind weiterhin dort verfĂŒgbar, wo sie sich befinden.
Wenn Ihr Code eine SicherheitslĂŒcke aufweist, ist diese weiterhin vorhanden.
Das Verstecken der Dokumentation macht es nur schwieriger zu verstehen, wie mit Ihrer API interagiert werden kann, und könnte es auch schwieriger machen, diese in der Produktion zu debuggen. Man könnte es einfach als eine Form von Sicherheit durch Verschleierung betrachten.
Wenn Sie Ihre API sichern möchten, gibt es mehrere bessere Dinge, die Sie tun können, zum Beispiel:
- Stellen Sie sicher, dass Sie ĂŒber gut definierte Pydantic-Modelle fĂŒr Ihre Requestbodys und Responses verfĂŒgen.
- Konfigurieren Sie alle erforderlichen Berechtigungen und Rollen mithilfe von AbhÀngigkeiten.
- Speichern Sie niemals Klartext-Passwörter, sondern nur Passwort-Hashes.
- Implementieren und verwenden Sie gÀngige kryptografische Tools wie pwdlib und JWT-Tokens, usw.
- FĂŒgen Sie bei Bedarf detailliertere Berechtigungskontrollen mit OAuth2-Scopes hinzu.
- ... usw.
Dennoch kann es sein, dass Sie einen ganz bestimmten Anwendungsfall haben, bei dem Sie die API-Dokumentation fĂŒr eine bestimmte Umgebung (z. B. fĂŒr die Produktion) oder abhĂ€ngig von Konfigurationen aus Umgebungsvariablen wirklich deaktivieren mĂŒssen.
Bedingte OpenAPI aus Einstellungen und Umgebungsvariablen¶
Sie können problemlos dieselben Pydantic-Einstellungen verwenden, um Ihre generierte OpenAPI und die DokumentationsoberflÀchen zu konfigurieren.
Zum Beispiel:
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"}
Hier deklarieren wir die Einstellung openapi_url mit dem gleichen Defaultwert "/openapi.json".
Und dann verwenden wir es beim Erstellen der FastAPI-App.
Dann könnten Sie OpenAPI (einschlieĂlich der DokumentationsoberflĂ€chen) deaktivieren, indem Sie die Umgebungsvariable OPENAPI_URL auf einen leeren String setzen, wie zum Beispiel:
$ 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)
Wenn Sie dann zu den URLs unter /openapi.json, /docs oder /redoc gehen, erhalten Sie lediglich einen 404 Not Found-Fehler, wie:
{
"detail": "Not Found"
}