Найти тему

FastAPI 2: Routing

На данный момент все наши endpoint-ы находятся в файле `main.py` и никак логически не разделены между собой.

Создаём способ подключения endpoint-ов

  1. Создаём папку `api`
  2. В папке `api` создаём папку `example_router`
  3. В папке `example_router` создаём ещё одну папку `api`
  4. В папке `example_router/api` создаём файлы `__init__.py` и `v1.py`
  5. В папке `example_router` создаём файл `__init__.py`

Код

В файле `example_router/api/v1.py` пишем:

from fastapi import APIRouter
router = APIRouter()

@router.get('/test_from_example_router')
def return_test():
return {'message': 'ok'}

В файле `example_router/api/__init__.py` пишем:

from . import v1

В файле `example_router/__init__.py` пишем:

from fastapi import APIRouter
from . import api

router = APIRouter()
router.include_router(api.v1.router)
# add imports for v2, v3, v4 ...

В файле `main.py` прописываем:

from fastapi import FastAPI
import api.example_router
from settings import settings

application = FastAPI()

application.include_router(api.example_router.router)

Запускаем `python run_service.py` и видим наш Swagger

Чего же мы добились?

  • Имея папку `example_router` мы храним всю логику и все endpoint-ы связанные только с этой папкой (приложением, router-ом)
  • Внутри, мы имеем файл v1.py, но, если мы захотим резко переписать весь код, мы сможем создать v2.py, провести рефакторинг, и подключить внутри файла `example_router/__init__.py`

Любое последующее приложение, это просто копирование папки и изменение имени и логики. Все остальные моменты остаются едиными:

  1. Импортировать в `main.py`

import api.another_example

2. Подключить к application

application.include_router(api.another_example.router)

Домашнее задание

Создать новый router-ом с названием another_example и подключить его