An open API service indexing awesome lists of open source software.

https://github.com/drveles/notes_api

API for managing and storing notes with authorization.
https://github.com/drveles/notes_api

docker-compose mongodb python3 rest-api

Last synced: 5 months ago
JSON representation

API for managing and storing notes with authorization.

Awesome Lists containing this project

README

          

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

- Пользователи имеют доступ только к своим заметкам

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

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

## API - `FastAPI`

### Endpoints:

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

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

Обязательное тело запроса:
```json
{
"note": "Note text",
"have_typo": "False",
"username": "user1",
"sha_password": "user1_sha_password",
}
```
В ответе возвращается JSON с информацией.

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

**Возврат всех заметок пользователя.**

Обязательные параметры:

```json
{
"username": "user1",
"sha_password": "user1_sha_pass"
}
```
В ответе возвращается JSON с заметками.

## DB - `MongoDB`

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

Заметки хранятся в JSON формате, со следующими полями:
``` 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](http://0.0.0.0:8000/docs)
3. Заполняем данные для запросов. Примеры данных пользователей:
```json
{
{
"username": "user1",
"sha_password": "0a041b9462caa4a31bac3567e0b6e6fd9100787db2ab433d96f6d178cabfce90",
},
{
"username": "user2",
"sha_password": "6025d18fe48abd45168528f18a82e265dd98d421a7084aa09f61b341703901a3",
},
}
```

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

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