Предположим, я хочу создать экземпляр класса с параметрами и получить от него маршрутизатор FastAPI, определяя при этом обработчики обычным способом, то есть @router.get(...). Как лучше всего это сделать?
Несколько рабочих примеров:
fastapi-utils cbv: не создает маршрутизатор для каждого экземпляра, и «Аргументы функции init вводятся FastAPI так же, как и для обычных функций». (ссылка)
+ app.state: усложняет инициализацию приложения и не позволяет создавать несколько копий одних и тех же маршрутов (например, подклассов).
classy-fastapi наиболее похож на приведенный выше пример; выбирает другой набор хаков (например, functools.partial вместо связанных методов); в частности, используется обширная копипаста определений методов маршрутизатора (
Возможно ли что-то лучшее, если оно будет интегрировано в сам FastAPI? Например, наличие частичного класса маршрута (также вместо декоратора), маршрута, являющегося классом данных, и т. д.?
Предположим, я хочу создать экземпляр класса с параметрами и получить от него маршрутизатор FastAPI, определяя при этом обработчики обычным способом, то есть @router.get(...). Как лучше всего это сделать? Несколько рабочих примеров: [code]#!/usr/bin/env python3 from __future__ import annotations
@dataclasses.dataclass(kw_only=True) class SampleHandlers(ApiAppHandlers): # Not shown here: for subclassing, this would require an explicit copy, or __mro__ walk. _CLS_ROUTER: ClassVar[fastapi.APIRouter] = fastapi.APIRouter()
if __name__ == "__main__": main() [/code] Альтернативы: [list] [*][code]APIRouter.add_api_route[/code] частично отделяет метод от определения. (ссылка) [*]fastapi-utils cbv: не создает маршрутизатор для каждого экземпляра, и «Аргументы функции [b]init[/b] вводятся FastAPI так же, как и для обычных функций». (ссылка) [*][code]Depends()[/code] + app.state: усложняет инициализацию приложения и не позволяет создавать несколько копий одних и тех же маршрутов (например, подклассов). [*]classy-fastapi наиболее похож на приведенный выше пример; выбирает другой набор хаков (например, functools.partial вместо связанных методов); в частности, используется обширная копипаста определений методов маршрутизатора ([code]def get(...)[/code]). [/list] Возможно ли что-то лучшее, если оно будет интегрировано в сам FastAPI? Например, наличие частичного класса маршрута (также вместо декоратора), маршрута, являющегося классом данных, и т. д.?