Skip to content

T4rk123/ToDo-API

Repository files navigation

TODO API

REST API для управления задачами, построенный на FastAPI с асинхронной архитектурой.

Стек технологий

  • Python 3.13 + FastAPI — асинхронный веб-фреймворк
  • SQLAlchemy 2.0 (async) — ORM для работы с БД
  • PostgreSQL 16 — основная база данных
  • Redis 7 — кеширование данных
  • Alembic — миграции базы данных
  • Docker + Docker Compose — контейнеризация
  • JWT — аутентификация (OAuth2 + Bearer)
  • Pydantic v2 — валидация данных
  • Pytest — тестирование

Архитектура

Проект построен по слоистой архитектуре:

app/
├── core/               # Инфраструктура (security, middleware, cache, exceptions)
├── models/             # SQLAlchemy ORM-модели
├── repositories/       # Слой доступа к данным (SQL-запросы)
├── schemas/            # Pydantic-схемы (валидация входа/выхода)
├── services/           # Бизнес-логика
├── routers/            # HTTP-эндпоинты
├── config.py           # Конфигурация через переменные окружения
├── database.py         # Подключение к БД, пул соединений
├── dependencies.py     # FastAPI Depends (DI)
└── main.py             # Точка входа, lifespan

Возможности

  • Аутентификация — регистрация, логин (JWT), ролевая модель (owner/admin)
  • CRUD задач — создание, чтение, обновление, удаление
  • Поиск и фильтрация — по статусу, текстовый поиск
  • Пагинация — offset/limit с метаданными (total, has_more)
  • Кеширование — Redis-кеш для GET-запросов с инвалидацией при изменениях
  • Rate limiting — защита эндпоинтов от злоупотреблений (slowapi)
  • Background tasks — фоновые задачи (приветственный email при регистрации)
  • Миграции — Alembic (автоматически при старте контейнера)
  • Тесты — pytest (auth, security)

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

Требования

  • Docker и Docker Compose

Установка

# Клонировать репозиторий
git clone https://github.com/T4rk123/todo-api.git
cd todo-api

# Создать файл окружения
cp .env.example .env

# Запустить
docker compose up -d --build

API доступен по адресу: http://localhost:8000

Swagger-документация: http://localhost:8000/docs

API-эндпоинты

Аутентификация

Метод Эндпоинт Описание
POST /auth/register Регистрация
POST /auth/login Логин (получение JWT-токена)

Задачи (требуют авторизации)

Метод Эндпоинт Описание
GET /tasks/ Список задач (пагинация, фильтры)
GET /tasks/stats Статистика по задачам
GET /tasks/{id} Получить задачу (с кешированием)
POST /tasks/ Создать задачу
PATCH /tasks/{id} Обновить задачу
DELETE /tasks/{id} Удалить задачу

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

# Регистрация
curl -X POST http://localhost:8000/auth/register \
  -H "Content-Type: application/json" \
  -d '{"username": "user", "email": "user@example.com", "password": "secret123"}'

# Логин
curl -X POST http://localhost:8000/auth/login \
  -d "username=user@example.com&password=secret123"

# Создать задачу (с токеном)
curl -X POST http://localhost:8000/tasks/ \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy groceries", "description": "Milk, bread, eggs"}'

Переменные окружения

Переменная Описание По умолчанию
DATABASE_URL URL подключения к PostgreSQL
REDIS_URL URL подключения к Redis redis://redis:6379
SECRET_KEY Секрет для подписи JWT
DEBUG Режим отладки true

About

REST API для управления задачами на FastAPI

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages