Skip to content

Do1otov/api_final_yatube

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REST API для Yatube

Проект представляет собой REST API для социальной сети Yatube — платформы для публикации постов, комментариев, подписок и работы с сообществами. API позволяет пользователям создавать и просматривать посты, комментировать их, подписываться на других пользователей, а также получать JWT-токены для авторизации.

Возможности

  • JWT-авторизация и аутентификация пользователей
  • Публикации: создание, получение, редактирование, удаление
  • Комментарии: добавление, редактирование, удаление
  • Подписки между пользователями
  • Работа с группами (сообществами)
  • Пагинация: поддержка limit и offset

Установка и запуск

Клонируйте репозиторий и перейдите в его директорию:

git clone https://github.com/Do1otov/api_final_yatube.git
cd api_final_yatube

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

python3.10 -m venv venv
source venv/bin/activate        # для Linux/macOS
source venv/Scripts/activate    # для Windows

Установите зависимости:

pip install -r requirements.txt

Перейдите в директорию API, выполните миграции и запустите сервер:

cd yatube_api
python manage.py migrate
python manage.py runserver

Некоторые примеры запросов к API

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

POST /api/v1/jwt/create/

Тело запроса:

{
  "username": "user1",
  "password": "1234password"
}

Ответ (200):

{
  "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWZyZXNoIjoxNzE0NzAwMDAwLCJ1c2VyX2lkIjoxfQ.g8LmFVZdS3Fkg0CjDEWcT7g_Mj1aOrKoJcYXp9glH_E",
  "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOjE3MTQ2MDAwMDAsInVzZXJfaWQiOjF9.r2kPCujhw5rHhvq1aG3IGCFcYoE95S2U7xKyB8kYBjs"
}

Обновить JWT-токен

POST /api/v1/jwt/refresh/

Тело запроса:

{
  "refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWZyZXNoIjoxNzE0NzAwMDAwLCJ1c2VyX2lkIjoxfQ.g8LmFVZdS3Fkg0CjDEWcT7g_Mj1aOrKoJcYXp9glH_E"
}

Ответ (200):

{
  "access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOjE3MTQ3MDAwMDAsInVzZXJfaWQiOjF9.9q5yxTuR1UVgMQ6o0B1q1mMMODQoZFY-KvcszrZuuz4"
}

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

GET /api/v1/posts/?limit=10&offset=20

Ответ (200):

{
  "count": 123,
  "next": "http://api.example.org/posts/?offset=30&limit=10",
  "previous": "http://api.example.org/posts/?offset=10&limit=10",
  "results": [
    {
      "id": 1,
      "author": "user1",
      "text": "Первый пост",
      "pub_date": "2023-01-01T12:00:00Z",
      "image": null,
      "group": 2
    }
  ]
}

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

POST /api/v1/posts/

Тело запроса:

{
  "text": "Новая публикация",
  "image": null,
  "group": 1
}

Ответ (201):

{
  "id": 2,
  "author": "user1",
  "text": "Новая публикация",
  "pub_date": "2025-05-03T15:00:00Z",
  "image": null,
  "group": 1
}

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

GET /api/v1/posts/2/

Ответ (200):

{
  "id": 2,
  "author": "user1",
  "text": "Новая публикация",
  "pub_date": "2025-05-03T15:00:00Z",
  "image": null,
  "group": 1
}

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

PUT /api/v1/posts/2/

Тело запроса:

{
  "text": "Обновлённый текст публикации",
  "image": null,
  "group": 1
}

Ответ (200):

{
  "id": 2,
  "author": "user1",
  "text": "Обновлённый текст публикации",
  "pub_date": "2025-05-03T15:00:00Z",
  "image": null,
  "group": 1
}

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

DELETE /api/v1/posts/2/

Ответ (204):

Пустой ответ без тела.


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

GET /api/v1/posts/2/comments/

Ответ (200):

[
  {
    "id": 1,
    "author": "user2",
    "text": "Отличный пост!",
    "created": "2025-05-03T10:30:00Z",
    "post": 2
  }
]

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

POST /api/v1/posts/2/comments/

Тело запроса:

{
  "text": "Спасибо за пост!"
}

Ответ (201):

{
  "id": 2,
  "author": "user3",
  "text": "Спасибо за пост!",
  "created": "2025-05-04T09:00:00Z",
  "post": 2
}

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

GET /api/v1/posts/2/comments/2/

Ответ (200):

{
  "id": 2,
  "author": "user3",
  "text": "Спасибо за пост!",
  "created": "2023-01-04T09:00:00Z",
  "post": 2
}

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

PUT /api/v1/posts/2/comments/2/

Тело запроса:

{
  "text": "Исправил свой комментарий"
}

Ответ (200):

{
  "id": 2,
  "author": "user3",
  "text": "Исправил свой комментарий",
  "created": "2025-05-04T09:00:00Z",
  "post": 2
}

Удаление комментария

DELETE /api/v1/posts/2/comments/2/

Ответ (204):

Пустой ответ без тела.


Список сообществ

GET /api/v1/groups/

Ответ (200):

[
  {
    "id": 1,
    "title": "Путешествия",
    "slug": "travel",
    "description": "Все о путешествиях"
  },
  {
    "id": 2,
    "title": "Технологии",
    "slug": "tech",
    "description": "Новости из мира IT"
  }
]

Информация о сообществе

GET /api/v1/groups/1/

Ответ (200):

{
  "id": 1,
  "title": "Путешествия",
  "slug": "travel",
  "description": "Все о путешествиях"
}

Подписки

GET /api/v1/follow/

Ответ (200):

[
  {
    "user": "user1",
    "following": "user2"
  }
]

Подписка

POST /api/v1/follow/

Тело запроса:

{
  "following": "user2"
}

Ответ (201):

{
  "user": "user1",
  "following": "user2"
}

Документация

Полная документация к API доступна по адресу:

http://127.0.0.1:8000/redoc/

About

api final yatube

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published