Практичний проєкт: REST API на Flask із JWT

05.03.2026 0 By AdminA

Ідея проєкту і чому вона корисна

Мета цього проєкту — створити невеликий, але повнофункціональний REST API на базі Flask, який підтримує реєстрацію користувачів, авторизацію через JWT (JSON Web Tokens), CRUD-операції для ресурсів і базові механізми безпеки. Такий проєкт допомагає зрозуміти, як працюють токени, як будувати структуру бекенду, як організувати робоче середовище та як підготувати додаток до розгортання.

Короткий опис функціоналу

  • Реєстрація та логін користувача з хешуванням паролів.
  • Авторизація через JWT з access та refresh токенами.
  • CRUD для простого ресурсу (наприклад, завдання, нотатки або продукти).
  • Валідація і обробка помилок.
  • Тести для ключових ендпоінтів і сценаріїв.

Технологічний стек і структура

Рекомендований стек: Python 3.10+, Flask, Flask-JWT-Extended або інша бібліотека для JWT, SQLAlchemy для ORM, Marshmallow або Pydantic для валідації, pytest для тестів. Для зберігання — SQLite на локалі або PostgreSQL у продакшені. Для контейнеризації — Docker.

Простий приклад структури проєкту:

  • app/
  • ├─ models.py
  • ├─ schemas.py
  • ├─ routes/
  • ├─ auth.py
  • ├─ extensions.py (ініціалізація БД, JWT тощо)
  • migrations/
  • tests/
  • Dockerfile, docker-compose.yml, requirements.txt

Основні кроки реалізації

1. Підготовка середовища

Створіть віртуальне середовище, встановіть залежності і ініціалізуйте репозиторій. Налаштуйте .env для конфіденційних змінних (секретний ключ, рядок підключення до БД, параметри JWT).

2. Модель користувача і хешування паролів

Описати модель User з полями email, password_hash, created_at. Хешувати паролі за допомогою bcrypt або argon2. Замість зберігання plain-text паролів — зберігати лише хеші.

3. Авторизація через JWT

Налаштувати логіку створення access та refresh токенів при логіні. Access токен має коротший термін життя, refresh — довший і використовується для отримання нового access. Реалізувати механізм ревокації refresh токенів (зберігання ідентифікаторів у БД або blacklist).

4. Ендпоінти для ресурсів

Реалізувати CRUD для вибраного ресурсу і захистити потрібні маршрути декоратором, що перевіряє JWT. Валідація вхідних даних допомагає уникнути некоректних записів у БД.

5. Обробка помилок і логування

Централізувати обробку помилок, повертаючи зрозумілі повідомлення та коректні HTTP-статуси. Налаштувати базове логування для відслідковування запитів та помилок.

Тестування і безпека

Писати unit- і integration-тести для реєстрації, логіна, захищених маршрутів і механізму оновлення токенів. Використовуйте pytest і фабрики даних для підготовки тестових записів. Перевірте, що доступ без токена або з простроченим токеном блокується.

Ключові аспекти безпеки:

  • Хешувати паролі (bcrypt/argon2).
  • Зберігати секрети у змінних оточення.
  • Налаштувати HTTPS у продакшені.
  • Обмежувати час життя access токенів і використовувати refresh токени обачно.
  • Впровадити rate limiting для критичних ендпоінтів (логін, реєстрація).

Розгортання і подальший розвиток

Підготуйте Dockerfile і docker-compose для локального запуску. Для продакшену використайте Gunicorn за Nginx або оберіть хмарні платформи з підтримкою Docker. Додайте міграції (Alembic) і CI/CD для автоматичного тестування і деплою.

Можливі покращення

  • Ролі і дозволи для користувачів.
  • Інтеграція OAuth2 (Google, GitHub).
  • Перехід на асинхронний фреймворк (FastAPI) для високої продуктивності.
  • Кешування запитів, логування з моніторингом і алертами.

Цей проєкт — відмінна база для навчання і створення мікросервісів. Почніть з мінімальної реалізації, додайте тести та поступово розширюйте функціонал відповідно до реальних потреб.

Comments

comments