Erklärung der Implementierungsmethode für interaktive Dokumente von Fastapi
# applications.py
class FastAPI(Starlette):
def __init__(
self,
*,
debug: bool = False,
routes: List[BaseRoute] = None,
title: str = "FastAPI",
description: str = "",
version: str = "0.1.0",
openapi_url: Optional[str] = "/openapi.json",
openapi_prefix: str = "",
default_response_class: Type[Response] = JSONResponse,
docs_url: Optional[str] = "/docs",
redoc_url: Optional[str] = "/redoc",
swagger_ui_oauth2_redirect_url: Optional[str] = "/docs/oauth2-redirect",
swagger_ui_init_oauth: Optional[dict] = None,
middleware: Sequence[Middleware] = None,
exception_handlers: Dict[Union[int, Type[Exception]], Callable] = None,
on_startup: Sequence[Callable] = None,
on_shutdown: Sequence[Callable] = None,
**extra: Dict[str, Any],
) -> None:
self.default_response_class = default_response_class
self._debug = debug
self.state = State()
self.router: routing.APIRouter = routing.APIRouter(
routes,
dependency_overrides_provider=self,
on_startup=on_startup,
on_shutdown=on_shutdown,
)
self.exception_handlers = (
{
} if exception_handlers is None else dict(exception_handlers)
)
self.user_middleware = [] if middleware is None else list(middleware)
self.middleware_stack = self.build_middleware_stack()
self.title = title
self.description = description
self.version = version
self.openapi_url = openapi_url
self.openapi_prefix = openapi_prefix.rstrip("/")
self.docs_url = docs_url
self.redoc_url = redoc_url
self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url
self.swagger_ui_init_oauth = swagger_ui_init_oauth
self.extra = extra
self.dependency_overrides: Dict[Callable, Callable] = {
}
self.openapi_version = "3.0.2"
if self.openapi_url:
assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'"
assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'"
if self.docs_url or self.redoc_url:
assert self.openapi_url, "The openapi_url is required for the docs"
self.openapi_schema: Optional[Dict[str, Any]] = None
self.setup()
Wenn die FastAPI-Klasse initialisiert wird, werden die folgenden Operationen für die API-Dokumentation ausgeführt:
Überprüfen Sie, ob openapi_url, docs_url und redoc_url leer sind, d. h. der Dokumenttitel, die Swagger-Version und der OpenAPI-Pfad müssen angegeben werden, die standardmäßig, aber nicht leer sein können
Rufen Sie die Setup-Methode auf
Die setup-Methode ruft dann die openapi-Methode und dann die get_openapi-Methode auf und führt die folgenden Operationen in dieser Methode aus:
Dokumenttitel, Versions-Post, Dokumentbeschreibung, Schnittstellen-Routing, verfügbare Neudefinition parsen
Rufen Sie get_openapi_path für die weitere Analyse und Überprüfung auf
Die Methode get_openapi_path vervollständigt hauptsächlich:
Überprüfung der Methodenanalyse
Analyse und Verifizierung von Operations-Metadaten (operation_id, operation_summary)
Sicherheitsdefinition und Betriebssicherheitsanalyse
Response-Body-Parsing
An diesem Punkt ist das Parsen der entsprechenden Modulparameter des Dokuments abgeschlossen, und der nächste Schritt ist das Rendern der Webseite
Kurz gesagt, wenn die API-Dokumentation während der FastAPI-Initialisierung generiert wird, werden die Parameter openapi_url/docs_url/redoc_url zuerst überprüft und dann wird die Einrichtungsmethode gestartet.Die Generierung der API-Dokumentation umfasst zwei Schritte: Analyse der API-Dokumentationsparameter und Dokumentwebseitencode Rendern, Parsing von Parametern unter Verwendung des Moduls openapi.utils verwendet das Modul openapi.docs zum Rendern von Webseiten, und die Reihenfolge des Renderns von Webseiten ist interaktives Dokument -> oauth2-Umleitung -> optionales Dokument.