/api_final_yatube

api final yatube

Primary LanguagePython

Проект

Позволяет создавть посты, разделять их на группы, подписываться на авторов.

Выполнен в рамках обучения в ЯП.

Как запустить проект:

Cоздать и активировать виртуальное окружение:

python3 -m venv --prompt="api_finel_yatube" venv
source venv/bin/activate

Установить зависимости из файла requirements.txt:

pip install -U pip
pip install -Ur requirements.txt

Выполнить миграции:

python3 manage.py migrate

Запустить проект:

python3 manage.py runserver

Аутентификация и пользователи

Для аутентификации инспользуются JWT токены, на данный момент существуют следующие endpoint:

/api/v1/jwt/create/ - Создание токена /api/v1/jwt/refresh/ - Обновление токена /api/v1/jwt/viryfy/ - Проверка токена

Управление пользователями через API отсутствует.

У неаутентифицированных пользователей доступ к API только на чтение, за исключением /api/v1/follow/ - там только аутентифицированные пользователи.

Аутентифицированным пользователям разрешено изменение и удаление своего контента; в остальных случаях доступ предоставляется только для чтения.

Время жизни JWT-токена 1 день

Описание API

Помимо эндпоинтов аутентификации доступны:

/api/v1/groups/ - Для просмотра списка групп

/api/v1/follow/ - Для просмотра и создания подписок на авторов

/api/v1/posts/ - Для просмотра и управления постами

Подробное описание API доступно по

/redoc/

Примеры API

Получение JWT-токена.

POST запрос к /api/v1/jwt/create/ формата

{
    "username": "string",
 	"password": "string"
}

В случае успеха возвращает код 200 и словарь вида:

{
    "refresh": "string",
    "access": "string"
}

Токен из access нужно использовать в заголовке Authorization, после Bearer для выполнения аутентифицированных запросов к API

Получение списка постов

GET запрос к /api/v1/posts/

Возвращает словарь:

{
    "count": 123,
    "next": "http://api.example.org/accounts/?offset=400&limit=100",
    "previous": "http://api.example.org/accounts/?offset=200&limit=100",
    "results": [
        {
            "id": 0,
            "author": "string",
            "text": "string",
            "pub_date": "2021-10-14T20:41:29.648Z",
            "image": "string",
            "group": 0
        }
    ]
}