Skip to main content

FastAPI project structure generator with best practices

Project description

FastAPI Template Generator

🚀 Генератор структуры FastAPI приложений с лучшими практиками разработки.

Создает готовую к продакшену архитектуру с модульной структурой, документацией и всеми необходимыми компонентами.

Быстрый старт

Установка

pip install fastapi-template-generator

Создание проекта

# Создать проект с указанным именем
python -m fastapi_template_generator my_awesome_api

# Создать проект с именем по умолчанию (app)
python -m fastapi_template_generator

# Создать проект без Docker файлов
python -m fastapi_template_generator my_project --no-docker

Запуск созданного проекта

cd my_awesome_api

# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Установить зависимости
pip install -r requirements.txt

# Настроить переменные окружения
cp .env.example .env
# Отредактируйте .env файл под ваши нужды

# Запустить приложение
uvicorn app:app --reload

🎉 Готово! Ваше API доступно по адресу http://localhost:8000

Что создается

Структура проекта

my_awesome_api/
├── app.py                 # Точка входа приложения
├── core/                  # Ядро приложения
│   ├── settings.py       # Настройки через pydantic-settings
│   ├── db.py            # Конфигурация базы данных + инициализация
│   ├── logger.py        # Настройка логирования (Loguru)
│   └── dependencies.py  # Общие зависимости (БД, авторизация)
├── middleware/           # Middleware компоненты
│   ├── error_handler.py # Глобальная обработка ошибок
│   ├── logging.py       # Логирование всех запросов
│   └── cors.py          # CORS настройки
├── shared/              # Общие компоненты
│   ├── schemas/         # Базовые схемы (ResponseModel, Pagination)
│   └── models/          # Базовые модели для наследования
├── modules/             # Бизнес модули
│   └── echo/           # Готовый пример модуля
│       ├── router.py    # API эндпоинты
│       ├── schemas.py   # Pydantic модели
│       ├── services.py  # Бизнес-логика
│       ├── models.py    # ORM модели
│       ├── funcs.py     # Вспомогательные функции
│       ├── constants.py # Константы
│       └── exceptions.py # Исключения модуля
├── utils/               # Общие утилиты
├── rules/               # 📚 Документация и best practices
├── logs/                # Папка для логов
├── requirements.txt     # Зависимости Python
├── .env.example        # Пример настроек окружения
├── .gitignore          # Git исключения
├── pyproject.toml      # Настройки форматирования (Black, isort)
├── Makefile            # Команды для разработки
├── Dockerfile          # Docker образ
├── docker-compose.yml  # Docker Compose с PostgreSQL
└── README.md           # Документация проекта

Готовые возможности

Async/await из коробки - все операции асинхронные
PostgreSQL + SQLAlchemy - настроенная база данных
Модульная архитектура - легко масштабируемая структура
Автоматическая инициализация БД - таблицы создаются при запуске
Bearer токен авторизация - защита эндпоинтов
Логирование Loguru - красивые структурированные логи
Middleware для обработки ошибок - сервер не падает
Валидация Pydantic - типизированные схемы
Soft delete - безопасное удаление записей
Пагинация - готовые схемы для списков
Health check - мониторинг состояния
Docker поддержка - контейнеризация
Форматирование кода - Black + isort + flake8
Документация API - автогенерируемая Swagger
Best practices - правила разработки в rules/

Использование созданного проекта

API Документация

После запуска доступна по адресам:

Примеры запросов

# Публичный эндпоинт
curl -X POST http://localhost:8000/api/echo/ \
     -H "Content-Type: application/json" \
     -d '{"message": "Hello World", "category": "test"}'

# Защищенный эндпоинт (требует Bearer токен)
curl -X POST http://localhost:8000/api/echo/protected \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer your-bearer-token-from-env" \
     -d '{"message": "Protected Hello", "category": "important"}'

# Получить список всех записей
curl http://localhost:8000/api/echo/?page=1&page_size=10

Настройка окружения

Все настройки в файле .env:

# Основные настройки
APP_APP_NAME="My Awesome API"
APP_DEBUG=true

# База данных (отдельные компоненты)
APP_DB_HOST=localhost
APP_DB_PORT=5432
APP_DB_NAME=my_api_db
APP_DB_USER=postgres
APP_DB_PASSWORD=secretpassword

# Безопасность
APP_BEARER_TOKEN=your-super-secret-bearer-token

# CORS
APP_ALLOWED_ORIGINS=["http://localhost:3000", "http://localhost:8080"]

Разработка

Полезные команды

# Форматирование и проверка кода
make format  # Автоформатирование (Black + isort)
make lint    # Проверка стиля (flake8)

# Запуск
make dev     # Запуск в режиме разработки
make run     # Запуск в продакшен режиме

# Работа с базой данных
make db-check    # Проверить подключение к БД
make db-init     # Инициализировать БД
make db-url      # Показать URL подключения

# Docker
make docker-up   # Запустить через Docker Compose
make docker-down # Остановить Docker Compose

Создание нового модуля

  1. Создайте папку в modules/my_module/
  2. Скопируйте структуру из modules/echo/
  3. Адаптируйте под свою логику
  4. Подключите роутер в app.py:
from modules.my_module.router import router as my_module_router

app.include_router(my_module_router, prefix="/api/my-module", tags=["my-module"])

Docker развертывание

# Запуск с PostgreSQL
docker-compose up -d

# Или только приложение
docker build -t my-api .
docker run -p 8000:8000 my-api

Архитектура

Принципы

  • Модульность: каждая функция в отдельном модуле
  • Слоистость: API → Service → Repository → Database
  • DRY: общий код в shared/ и utils/
  • Типизация: Pydantic схемы для всех данных
  • Асинхронность: async/await везде

Структура модуля

# router.py - API эндпоинты
@router.get("/items", response_model=PaginatedResponse[ItemResponse])
async def get_items(pagination: PaginationParams = Depends()):
    pass

# schemas.py - Pydantic модели
class ItemCreate(BaseModel):
    name: str = Field(..., min_length=1, max_length=100)

# services.py - бизнес-логика
class ItemService:
    async def create_item(self, db: AsyncSession, data: ItemCreate):
        pass

# models.py - ORM модели
class Item(BaseModel):  # Наследуется от BaseModel с id, created_at, etc.
    __tablename__ = "items"
    name = Column(String(100), nullable=False)

Стандартные ответы

Все API ответы в едином формате:

{
  "status": "ok",
  "data": {...},
  "message": "Optional success message"
}

Ошибки:

{
  "status": "error",
  "message": "Human readable error",
  "error_code": 400,
  "details": {...}
}

Безопасность

  • Bearer токен для защищенных эндпоинтов
  • Валидация входных данных через Pydantic
  • CORS настройки для фронтенда
  • SQL инъекции защищены ORM
  • Логирование подозрительной активности

Мониторинг

  • Health check эндпоинт с проверкой БД
  • Структурированные логи (консоль + файлы)
  • Метрики времени обработки в заголовках ответов
  • Отслеживание ошибок с stack trace

Производительность

  • Async/await для всех операций
  • Connection pooling для БД
  • Пагинация для больших списков
  • Оптимизированные запросы с proper indexing
  • Мягкое удаление вместо физического

Документация

Созданный проект содержит папку rules/ с подробными правилами:

  • architecture.md - Принципы архитектуры
  • naming.md - Правила именования
  • database.md - Работа с БД
  • api_design.md - Дизайн API

Опции генератора

# Справка
python -m fastapi_template_generator --help

# Создать без Docker файлов
python -m fastapi_template_generator my_project --no-docker

# Показать версию
python -m fastapi_template_generator --version

Примеры использования

Стартап MVP

python -m fastapi_template_generator my_startup_api
cd my_startup_api
# Настроить .env
make dev

Корпоративный проект

python -m fastapi_template_generator corporate_api
cd corporate_api
# Настроить production окружение
docker-compose up -d

Микросервис

python -m fastapi_template_generator user_service --no-docker
cd user_service
# Интегрировать в существующую инфраструктуру

Совместимость

  • Python: 3.8+
  • FastAPI: 0.104+
  • SQLAlchemy: 2.0+
  • PostgreSQL: 12+
  • Docker: 20+

Вклад в проект

Приветствуются:

  • Новые шаблоны модулей
  • Улучшения архитектуры
  • Дополнения в документацию
  • Исправления багов

Лицензия

MIT License - используйте свободно в коммерческих и открытых проектах.


Создавайте качественные FastAPI приложения быстро и с удовольствием! 🚀

GitHub: https://github.com/daswer123/fastapi-template-generator
PyPI: https://pypi.org/project/fastapi-template-generator/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_template_generator-0.0.1.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_template_generator-0.0.1-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_template_generator-0.0.1.tar.gz.

File metadata

File hashes

Hashes for fastapi_template_generator-0.0.1.tar.gz
Algorithm Hash digest
SHA256 652dea19d0caaa6587c91a9842a7de2daf1d3118106b86bc2547e0d8243ecacc
MD5 708d7d657c02e6397f16a4a9da78ba9f
BLAKE2b-256 16fe8cd0fb2c510318dd9f97a579059f26df6d7e538b863de46f18c27c2d1346

See more details on using hashes here.

File details

Details for the file fastapi_template_generator-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_template_generator-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7446ca6e7c2988c84bb98a1d04e83e3c2e25024658088a6316a3c6773bac35ce
MD5 a16945558d768d11d866cce7487dcc45
BLAKE2b-256 1fced8636a2ee80ec7e0ef0f9a2ac577676638865f23fb593fa9cb2635bfccd4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page