Home / Class/ APIRoute Class — fastapi Architecture

APIRoute Class — fastapi Architecture

Architecture documentation for the APIRoute class in routing.py from the fastapi codebase.

Entity Profile

Dependency Diagram

graph TD
  aa28685f_bb97_e988_ff40_3e5385960f32["APIRoute"]
  c509eb0b_23fb_fa54_c7e7_d4bec7d2f3a9["DefaultPlaceholder"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|extends| c509eb0b_23fb_fa54_c7e7_d4bec7d2f3a9
  c3c74a2e_7782_7129_804f_485d05b8abf0["Response"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|extends| c3c74a2e_7782_7129_804f_485d05b8abf0
  de395a51_26f8_3424_1af0_2f5bef39c893["routing.py"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|defined in| de395a51_26f8_3424_1af0_2f5bef39c893
  d8b4fb83_3521_0b7e_fcfa_0c7f161ca116["__init__()"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|method| d8b4fb83_3521_0b7e_fcfa_0c7f161ca116
  2b3c8ec5_f007_7808_7e6a_0e94569b6a17["get_route_handler()"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|method| 2b3c8ec5_f007_7808_7e6a_0e94569b6a17
  6208ae89_79ce_8e86_7744_3d593f84b31e["matches()"]
  aa28685f_bb97_e988_ff40_3e5385960f32 -->|method| 6208ae89_79ce_8e86_7744_3d593f84b31e

Relationship Graph

Source Code

fastapi/routing.py lines 556–710

class APIRoute(routing.Route):
    def __init__(
        self,
        path: str,
        endpoint: Callable[..., Any],
        *,
        response_model: Any = Default(None),
        status_code: Optional[int] = None,
        tags: Optional[list[Union[str, Enum]]] = None,
        dependencies: Optional[Sequence[params.Depends]] = None,
        summary: Optional[str] = None,
        description: Optional[str] = None,
        response_description: str = "Successful Response",
        responses: Optional[dict[Union[int, str], dict[str, Any]]] = None,
        deprecated: Optional[bool] = None,
        name: Optional[str] = None,
        methods: Optional[Union[set[str], list[str]]] = None,
        operation_id: Optional[str] = None,
        response_model_include: Optional[IncEx] = None,
        response_model_exclude: Optional[IncEx] = None,
        response_model_by_alias: bool = True,
        response_model_exclude_unset: bool = False,
        response_model_exclude_defaults: bool = False,
        response_model_exclude_none: bool = False,
        include_in_schema: bool = True,
        response_class: Union[type[Response], DefaultPlaceholder] = Default(
            JSONResponse
        ),
        dependency_overrides_provider: Optional[Any] = None,
        callbacks: Optional[list[BaseRoute]] = None,
        openapi_extra: Optional[dict[str, Any]] = None,
        generate_unique_id_function: Union[
            Callable[["APIRoute"], str], DefaultPlaceholder
        ] = Default(generate_unique_id),
    ) -> None:
        self.path = path
        self.endpoint = endpoint
        if isinstance(response_model, DefaultPlaceholder):
            return_annotation = get_typed_return_annotation(endpoint)
            if lenient_issubclass(return_annotation, Response):
                response_model = None
            else:
                response_model = return_annotation
        self.response_model = response_model
        self.summary = summary
        self.response_description = response_description
        self.deprecated = deprecated
        self.operation_id = operation_id
        self.response_model_include = response_model_include
        self.response_model_exclude = response_model_exclude
        self.response_model_by_alias = response_model_by_alias
        self.response_model_exclude_unset = response_model_exclude_unset
        self.response_model_exclude_defaults = response_model_exclude_defaults
        self.response_model_exclude_none = response_model_exclude_none
        self.include_in_schema = include_in_schema
        self.response_class = response_class
        self.dependency_overrides_provider = dependency_overrides_provider
        self.callbacks = callbacks
        self.openapi_extra = openapi_extra
        self.generate_unique_id_function = generate_unique_id_function
        self.tags = tags or []
        self.responses = responses or {}
        self.name = get_name(endpoint) if name is None else name
        self.path_regex, self.path_format, self.param_convertors = compile_path(path)
        if methods is None:
            methods = ["GET"]
        self.methods: set[str] = {method.upper() for method in methods}
        if isinstance(generate_unique_id_function, DefaultPlaceholder):
            current_generate_unique_id: Callable[[APIRoute], str] = (
                generate_unique_id_function.value
            )
        else:
            current_generate_unique_id = generate_unique_id_function
        self.unique_id = self.operation_id or current_generate_unique_id(self)
        # normalize enums e.g. http.HTTPStatus
        if isinstance(status_code, IntEnum):
            status_code = int(status_code)
        self.status_code = status_code
        if self.response_model:
            assert is_body_allowed_for_status_code(status_code), (
                f"Status code {status_code} must not have a response body"

Domain

Defined In

Frequently Asked Questions

What is the APIRoute class?
APIRoute is a class in the fastapi codebase, defined in fastapi/routing.py.
Where is APIRoute defined?
APIRoute is defined in fastapi/routing.py at line 556.
What does APIRoute extend?
APIRoute extends DefaultPlaceholder, Response.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free