Привет!

Не первый раз на работе возникает необходимость реализовать отдельные сервисы в FastAPI(при этом связанные одними сервисами/моделями) и при этом исключить дублирование кода.

Stackoverflow и прочие сервисы не дают решения данного вопроса и не первый раз реализовываю вот такую структуру приложения:

├───application
│   ├───api
│   ├───core
│   ├───documentations
│   ├───second_app
│   │   └───api
│   │   └───main.py
│   ├───third_app
│   │   └───api
│   │   └───main.py
│   ├───exceptions
│   ├───models
│   ├───orm
│   ├───repositories
│   ├───schemas
│   ├───services
│   ├───settings
│   ├───tests
│   ├───utils
│   └───main.py

При этом получаем:

  • основное приложение, которое запускается, к примеру, вот так uvicorn application.main:app --host 0.0.0.0 --port 8000
  • второе приложение использует общие модели/сервисы/зависимости, но имеет отдельные эндпоинты/лайфспан и запускается uvicorn application.second_app.main:app --host 0.0.0.0 --port 8001
  • третье запускается аналогично: uvicorn application.third_app.main:app --host 0.0.0.0 --port 8002


Теперь можно разнести их либо на одной машине на разных портах, либо на разных, либо в разных контейнерах и тд..