Практичний проєкт: REST API на Flask із JWT
05.03.2026Ідея проєкту і чому вона корисна
Мета цього проєкту — створити невеликий, але повнофункціональний 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) для високої продуктивності.
- Кешування запитів, логування з моніторингом і алертами.
Цей проєкт — відмінна база для навчання і створення мікросервісів. Почніть з мінімальної реалізації, додайте тести та поступово розширюйте функціонал відповідно до реальних потреб.