Этот проект создан для демонстрации правильной архитектуры FastAPI приложения с разделением бизнес-логики от эндпоинтов
Test API - это учебно-демонстрационный проект, показывающий как правильно организовать структуру FastAPI приложения. Основная особенность - вся бизнес-логика вынесена из эндпоинтов в отдельные модули, что делает код чистым, поддерживаемым и тестируемым.
- ✅ Чистые эндпоинты - роутеры содержат только вызовы функций
- ✅ Разделение ответственности - бизнес-логика в отдельных файлах
- ✅ Модульность - каждый тип операции в своем файле
- ✅ Асинхронность - полная поддержка async/await
- ✅ Валидация данных - через Pydantic схемы
├── 📄 main.py # Точка входа в приложение
├── 📁 routers/
│ └── 📄 router.py # Эндпоинты (только вызовы функций!)
├── 📁 db/
│ ├── 📄 engine.py # Конфигурация БД
│ ├── 📄 models.py # SQLAlchemy модели
│ ├── 📄 session.py # Сессии БД
│ ├── 📄 base.py # Базовый класс модели
│ └── 📁 types/ # 🎯 БИЗНЕС-ЛОГИКА ЗДЕСЬ!
│ ├── 📄 get_all_users.py # Получение пользователей
│ ├── 📄 save_token.py # Сохранение токена
│ ├── 📄 delete_user.py # Удаление пользователя
│ └── 📄 generate_token.py # Генерация токена
├── 📁 schemas/
│ └── 📄 schemas.py # Pydantic схемы валидации
├── 📁 client/
│ └── 📄 lifespan.py # Startup/Shutdown события
└── 📄 pyproject.toml # Конфигурация проекта
| Метод | Путь | Описание |
|---|---|---|
GET |
/ |
Информация о приложении |
GET |
/test/db |
Получить всех пользователей |
POST |
/test/new_user |
Создать нового пользователя |
DELETE |
/test/user |
Удалить пользователя |
- FastAPI - современный веб-фреймворк
- SQLAlchemy - ORM для работы с БД
- Pydantic - валидация данных
- AsyncIO - асинхронное программирование
- Python 3.9+
Этот проект создан для демонстрации правильной архитектуры веб-приложений:
- Разделение ответственности - эндпоинты не знают о бизнес-логике
- Повторное использование - функции можно вызывать из разных мест
- Тестируемость - бизнес-логику легко тестировать отдельно
- Поддерживаемость - изменения в логике не затрагивают HTTP слой
👨💻 Разработчик: @NEFORNDU
📧 Для вопросов и предложений: создайте Issue в репозитории