MrGorkiy / api_final_yatube

Проект Yatube - социальная сеть для публикации личных дневников.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

API Yatube

Python Django Django REST Framework JWT


Функционал

Проект Yatube - социальная сеть для публикации личных дневников.

Api к социальной сети Yatube, позволяющее:

  • Не авторизированным пользователям:
    • Просматривать список и детальную информацию постов
    • Просматривать комментарии к постам
    • Просматривать список и детальную информацию групп
    • Регистрация пользователя
  • Авторизированным пользователям:
    • Все возможности не авторизированного пользователя*
    • Добавлять, редактировать, удалять и изменять только свои посты
    • Добавлять, редактировать, удалять и изменять только свои комментарии к постам
    • Добавлять новые подписки на пользователей или просматривать их
    • Создавать JWT токен и обновлять его в случае утраты или компрометации

Эндпоинты

http://127.0.0.1:8000/redoc/


Получение публикаций

Получить список всех публикаций. При указании параметров limit и offset выдача должна работать с пагинацией.

http://127.0.0.1:8000/api/v1/posts/ GET

Parameters:

  • limit: integer -- Количество публикаций на страницу
  • offset: integer -- Номер страницы после которой начинать выдачу

Response:

  • 200 Удачное выполнение запроса без пагинации

Status code 200

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

⬆️Эндпоинты


Создание публикации

Добавление новой публикации в коллекцию публикаций. Анонимные запросы запрещены.

http://127.0.0.1:8000/api/v1/posts/ POST

Payload:

{
  "text": "string",
  "image": "string",
  "group": 0
}

Response:

  • 201 Удачное выполнение запроса
  • 400 Отсутствует обязательное поле в теле запроса
  • 401 Запрос от имени анонимного пользователя

Status code 201

{
  "id": 0,
  "author": "string",
  "text": "string",
  "pub_date": "2019-08-24T14:15:22Z",
  "image": "string",
  "group": 0
}

Status code 400

{
  "text": [
    "Обязательное поле."
  ]
}

Status code 401

{
  "detail": "Учетные данные не были предоставлены."
}

⬆️Эндпоинты


Получение публикации

Получение публикации по id.

http://127.0.0.1:8000/api/v1/posts/{id}/ GET

Parameters:

  • id: integer -- id публикации

Response:

  • 200 Удачное выполнение запроса
  • 404 Попытка запроса несуществующей публикации

Status code 201

{
  "id": 0,
  "author": "string",
  "text": "string",
  "pub_date": "2019-08-24T14:15:22Z",
  "image": "string",
  "group": 0
}

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


Обновление публикации

Обновление публикации по id. Обновить публикацию может только автор публикации. Анонимные запросы запрещены.

http://127.0.0.1:8000/api/v1/posts/{id}/ PUT

Parameters:

  • id: integer -- id публикации

Payload:

{
  "text": "string",
  "image": "string",
  "group": 0
}

Response:

  • 200 Удачное выполнение запроса
  • 400 Отсутствует обязательное поле в теле запроса
  • 401 Запрос от имени анонимного пользователя
  • 403 Попытка изменения чужого контента
  • 404 Попытка изменения несуществующей публикации

Status code 200

{
  "id": 0,
  "author": "string",
  "text": "string",
  "pub_date": "2019-08-24T14:15:22Z",
  "image": "string",
  "group": 0
}

Status code 400

{
  "text": [
    "Обязательное поле."
  ]
}

Status code 401

{
  "detail": "Учетные данные не были предоставлены."
}

Status code 403

{
  "detail": "У вас недостаточно прав для выполнения данного действия."
}

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


Частичное обновление публикации

Частичное обновление публикации по id. Обновить публикацию может только автор публикации. Анонимные запросы запрещены.

http://127.0.0.1:8000/api/v1/posts/{id}/ PATCH

Parameters:

  • id: integer -- id публикации

Payload:

{
  "text": "string",
  "image": "string",
  "group": 0
}

Response:

  • 200 Удачное выполнение запроса
  • 401 Запрос от имени анонимного пользователя
  • 403 Попытка изменения чужого контента
  • 404 Попытка изменения несуществующей публикации

Status code 200

{
  "id": 0,
  "author": "string",
  "text": "string",
  "pub_date": "2019-08-24T14:15:22Z",
  "image": "string",
  "group": 0
}

Status code 401

{
  "detail": "Учетные данные не были предоставлены."
}

Status code 403

{
  "detail": "У вас недостаточно прав для выполнения данного действия."
}

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


Удаление публикации

Удаление публикации по id. Удалить публикацию может только автор публикации. Анонимные запросы запрещены.

http://127.0.0.1:8000/api/v1/posts/{id}/ DELETE

Parameters:

  • id: integer -- id публикации

Response:

  • 204 Удачное выполнение запроса
  • 401 Запрос от имени анонимного пользователя
  • 403 Попытка изменения чужого контента
  • 404 Попытка удаления несуществующей публикации

Status code 401

{
  "detail": "Учетные данные не были предоставлены."
}

Status code 403

{
  "detail": "У вас недостаточно прав для выполнения данного действия."
}

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


Получение комментариев

Получение всех комментариев к публикации.

http://127.0.0.1:8000/api/v1/posts/{post_id}/comments/ GET

Parameters:

  • id: integer -- id публикации

Response:

  • 200 Удачное выполнение запроса
  • 404 Получение списка комментариев к несуществующей публикации

Status code 200

[
  {
    "id": 0,
    "author": "string",
    "text": "string",
    "created": "2019-08-24T14:15:22Z",
    "post": 0
  }
]

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


Добавление комментария

Добавление нового комментария к публикации. Анонимные запросы запрещены.

http://127.0.0.1:8000/api/v1/posts/{post_id}/comments/ POST

Parameters:

  • id: integer -- id публикации

Payload:

{
  "text": "string"
}

Response:

  • 201 Удачное выполнение запроса
  • 400 Отсутствует обязательное поле в теле запроса
  • 401 Запрос от имени анонимного пользователя
  • 404 Попытка добавить комментарий к несуществующей публикации

Status code 200

{
  "id": 0,
  "author": "string",
  "text": "string",
  "created": "2019-08-24T14:15:22Z",
  "post": 0
}

Status code 400

{
  "text": [
    "Обязательное поле."
  ]
}

Status code 401

{
  "detail": "Учетные данные не были предоставлены."
}

Status code 404

{
  "detail": "Страница не найдена."
}

⬆️Эндпоинты


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

Создать fork репозитория, клонировать на компьютер и перейти в него в командной строке:

https://github.com/MrGorkiy/api_final_yatube.git
git clone https://github.com/YOU_NAME/api_final_yatube.git
cd api_final_yatube

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

python -m venv env
source env/bin/activate
python -m pip install --upgrade pip

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

pip install -r requirements.txt

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

python manage.py migrate

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

python manage.py runserver

⬆️Функционал

Автор: MrGorkiy

About

Проект Yatube - социальная сеть для публикации личных дневников.


Languages

Language:Python 99.1%Language:HTML 0.9%