RESTfull cервис для управления заметками.
- Пользователи имеют доступ только к своим заметкам
- Заметки проверярются на орфографические ошибки используя API сервиса "Яндекс.Спеллер"
Stack: Python
, MongoDB
, Docker
, FastAPI
, aiohttp
, asyncio
, unittest
, requests
Добавление новой заметки пользователя в базу данных.
Обязательное тело запроса:
{
"note": "Note text",
"have_typo": "False",
"username": "user1",
"sha_password": "user1_sha_password",
}
В ответе возвращается JSON с информацией.
Возврат всех заметок пользователя.
Обязательные параметры:
{
"username": "user1",
"sha_password": "user1_sha_pass"
}
В ответе возвращается JSON с заметками.
Считаю, что для текстовых заметок документоориентированная база данных подходходит идеально.
Заметки хранятся в JSON формате, со следующими полями:
{
"_id": "auto_generated",
"username": "str",
"note": "str",
"have_typo": "bool"
}
- Поднимаем докер контейнеры с сервисом и базой данных:
docker compose up --build -d
- Устнавливаем зависимости для тестов:
pip install requests aiohttp
- Запускаем тесты:
python3 tests.py
- Поднимаем докер контейнеры, если они еще не работают
docker compose up --build -d
- Открываем в браузере http://0.0.0.0:8000/docs
- Заполняем данные для запросов. Примеры данных пользователей:
{
{
"username": "user1",
"sha_password": "0a041b9462caa4a31bac3567e0b6e6fd9100787db2ab433d96f6d178cabfce90",
},
{
"username": "user2",
"sha_password": "6025d18fe48abd45168528f18a82e265dd98d421a7084aa09f61b341703901a3",
},
}
- Аутентификация пользователей, не храня сами пароли, а только их sha256
- Авторизация пользователей, чтобы каждый видел только свои заметки
- API для обработки запросов пользователей
- Добавление и просмотр заметок
- Валидация текста на ошибки через Яндекс.Спеллер
- Сохранение заметок в базу данных
- Оркестация docker контейнерами с компонентами сервиса
- Тесты для всех компонентов. Модульные и интеграционные
- Код соответствует стилевым нормам. Black + Pylint
- В коде прописаны подсказки типов
- Описана инструкция по тестированию API
- Терминальный интерфейс для работы с заметками.
- Тесты в docker контейнере, с сохранением логов теста.