Erklärung der Implementierungsmethode für interaktive Dokumente von Fastapi

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.

おすすめ

転載: blog.csdn.net/weixin_50153843/article/details/130462707