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.
- Host: GitHub
- URL: https://github.com/drveles/notes_api
- Owner: drveles
- License: mit
- Created: 2024-08-26T11:28:12.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-22T07:50:03.000Z (over 1 year ago)
- Last Synced: 2025-04-07T18:52:15.149Z (about 1 year ago)
- Topics: docker-compose, mongodb, python3, rest-api
- Language: Python
- Homepage:
- Size: 38.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 контейнере, с сохранением логов теста.