Skip to content

API for managing and storing notes with authorization.

License

Notifications You must be signed in to change notification settings

drveles/notes_api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API для заметок

RESTfull cервис для управления заметками.

  • Пользователи имеют доступ только к своим заметкам
  • Заметки проверярются на орфографические ошибки используя API сервиса "Яндекс.Спеллер"

Stack: Python, MongoDB, Docker, FastAPI, aiohttp, asyncio, unittest, requests

API - FastAPI

Endpoints:

1. POST http://host:port/add-note/

Добавление новой заметки пользователя в базу данных.
Обязательное тело запроса:

{
    "note": "Note text",
    "have_typo": "False",
    "username": "user1",
    "sha_password": "user1_sha_password",
}

В ответе возвращается JSON с информацией.

2. GET http://host:port/notes/

Возврат всех заметок пользователя.
Обязательные параметры:

{
    "username": "user1", 
    "sha_password": "user1_sha_pass"
}

В ответе возвращается JSON с заметками.

DB - MongoDB

Считаю, что для текстовых заметок документоориентированная база данных подходходит идеально.
Заметки хранятся в JSON формате, со следующими полями:

{
    "_id": "auto_generated",
    "username": "str",
    "note": "str",
    "have_typo": "bool"
}

Тестирование

Автотесты

  1. Поднимаем докер контейнеры с сервисом и базой данных:
    docker compose up --build -d
  2. Устнавливаем зависимости для тестов:
    pip install requests aiohttp
  3. Запускаем тесты:
    python3 tests.py

Ручное

  1. Поднимаем докер контейнеры, если они еще не работают
    docker compose up --build -d
  2. Открываем в браузере http://0.0.0.0:8000/docs
  3. Заполняем данные для запросов. Примеры данных пользователей:
{
    {
        "username": "user1",
        "sha_password": "0a041b9462caa4a31bac3567e0b6e6fd9100787db2ab433d96f6d178cabfce90",
    },
    {
        "username": "user2", 
        "sha_password": "6025d18fe48abd45168528f18a82e265dd98d421a7084aa09f61b341703901a3",
    },
}

Что реализовано:

  • Аутентификация пользователей, не храня сами пароли, а только их sha256
  • Авторизация пользователей, чтобы каждый видел только свои заметки
  • API для обработки запросов пользователей
    • Добавление и просмотр заметок
    • Валидация текста на ошибки через Яндекс.Спеллер
    • Сохранение заметок в базу данных
  • Оркестация docker контейнерами с компонентами сервиса
  • Тесты для всех компонентов. Модульные и интеграционные
  • Код соответствует стилевым нормам. Black + Pylint
  • В коде прописаны подсказки типов
  • Описана инструкция по тестированию API

Что не сделано:

  • Терминальный интерфейс для работы с заметками.
  • Тесты в docker контейнере, с сохранением логов теста.