FastAPI приложения: шаблон архитектуры

Posted by


Архитектура FastAPI приложения должна быть хорошо организована и структурирована, чтобы обеспечить эффективное и легкое управление кодом. В этом руководстве мы рассмотрим основные принципы и шаблоны для создания FastAPI приложения.

  1. Структура проекта:
    Прежде чем приступить к созданию приложения, важно определить его структуру. Рекомендуемая структура проекта для FastAPI приложения может выглядеть следующим образом:

    myapp/
    |-- main.py
    |-- api/
    |   |-- __init__.py
    |   |-- routers/
    |       |-- __init__.py
    |       |-- router1.py
    |       |-- router2.py
    |-- models/
    |   |-- __init__.py
    |   |-- user.py
    |-- services/
    |   |-- __init__.py
    |   |-- user_service.py
    |-- dependencies/
    |   |-- __init__.py
    |   |-- database.py
  2. Главный файл приложения:
    В главном файле (например, main.py) необходимо создать экземпляр FastAPI приложения и подключить к нему все необходимые роутеры и зависимости.

    
    from fastapi import FastAPI
    from myapp.api.routers import router1, router2

app = FastAPI()

app.include_router(router1)
app.include_router(router2)


3. Маршрутизаторы:
Роутеры (routers) представляют собой маршруты для обработки запросов. Каждый роутер может быть организован в отдельном файле (например, `router1.py`).
```python
from fastapi import APIRouter
from myapp.services.user_service import UserService

router1 = APIRouter()
user_service = UserService()

@router1.get("/users/{user_id}")
async def get_user(user_id: int):
    user = user_service.get_user(user_id)
    return {"user": user}
  1. Модели:
    Модели (models) используются для описания данных, с которыми работает приложение. Они могут быть организованы в отдельной директории (например, models/user.py).

    
    from pydantic import BaseModel

class User(BaseModel):
id: int
name: str


5. Сервисы:
Сервисы (services) содержат бизнес-логику приложения. Они могут использоваться для выполнения операций с данными и вызова методов моделей. Организуйте их в отдельной директории (например, `services/user_service.py`).
```python
from myapp.models.user import User

class UserService:
    def get_user(self, user_id: int) -> User:
        # Реализация получения пользователя из базы данных
        pass
  1. Зависимости:
    Зависимости (dependencies) используются для управления общими ресурсами приложения, например, базой данных. Они могут быть организованы в отдельной директории (например, dependencies/database.py).

    
    from fastapi import Depends
    from myapp.dependencies.database import get_db

def get_user_service(db=Depends(get_db)):
return UserService(db)


7. Запуск приложения:
Для запуска FastAPI приложения, выполните следующую команду:

uvicorn main:app –reload



Это был краткий обзор основных принципов и шаблонов архитектуры FastAPI приложения. Пользуясь этим руководством, вы сможете эффективно создать структурированное и легко управляемое приложение на основе FastAPI.
0 0 votes
Article Rating
23 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@maxerusman6978
1 month ago

Благодарю за видео, Тагир, уже прошел год с момента публикации видео, будет еще контент?
Хотел также предложить свою помощь (на безвозмездной основе), может смогу способствовать развитию канала.
Жду обратной связи)

@rozovayautopiya
1 month ago

Превосходно

@semimaks
1 month ago

Спасибо за краткое объяснение без лишней воды!
Я так понимаю вы применяете в своём подходе методологию чистой архитектуры?

@zrxmax_
1 month ago

можно писать просто from .routes import Route

. обозначит текущий каталог

@alexeymatveev9031
1 month ago

что -то не получается, жалко нет requirements.txt… A, все, заработало. Спасибо! Супер видео, вернулся спустя время, очень в тему!

@Aleksey-t9b
1 month ago

Благодарю, Отличное видео. Интересно было бы увидеть реализацию авторизации и регистрации через FastAPI-users или другую библиотеку👍

@АртемАртеменконезабывайвыходит
1 month ago

Ох ты тут намудрил а не проще было класический SOA?

@citieslg
1 month ago

Спасибо за урок. Прошел с удовольствием
Огромная просба продолжай плиз

@wadyn95
1 month ago

Какое-то странное стремление всё сделать в ООП стиле, лишнее усложнени

@annaarbuz
1 month ago

Ужос

@unstoppableharrison140
1 month ago

Какие главные сильные стороны у FastAPI?

@MrHopeOrLess
1 month ago

Отличное видео! Как сделать себе такие же иконки в ВСе?)))))

@kab_psih
1 month ago

Спасибо, отличный подход!

@ffff00-korj
1 month ago

Класс, давно искал такой, формат

@lil_fix
1 month ago

Мммм, что-то знакомое
Можно ссылку на оригинальный проект?

@arka4443
1 month ago

Для чего это морока с роутами? Есть какой то аргумент в пользу ооп здесь?

@АлександрТезин-м6ъ
1 month ago

Интересно посмотреть на другие архитектуры но я обычно немного другую использую

@TheVenelo
1 month ago

Не много странно, что в описании не указана ссылка на такой шаблон, для более наглядного изучения вне видео. Спасибо за контент)

@bxxdan
1 month ago

Можете создать репозиторий этого шаблона на гитхабе?

@Анатолий-л6я5е
1 month ago

Спасибо. Отличное видео. Очень хочется увидеть полный проект, который максимально приближен к "боевым" проектам. и связка в базой, брокерами, обработчиками и тд…