Проект представляет собой 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
POST /api/v1/jwt/create/
{
"username": "user1",
"password": "1234password"
}
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWZyZXNoIjoxNzE0NzAwMDAwLCJ1c2VyX2lkIjoxfQ.g8LmFVZdS3Fkg0CjDEWcT7g_Mj1aOrKoJcYXp9glH_E",
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOjE3MTQ2MDAwMDAsInVzZXJfaWQiOjF9.r2kPCujhw5rHhvq1aG3IGCFcYoE95S2U7xKyB8kYBjs"
}
POST /api/v1/jwt/refresh/
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWZyZXNoIjoxNzE0NzAwMDAwLCJ1c2VyX2lkIjoxfQ.g8LmFVZdS3Fkg0CjDEWcT7g_Mj1aOrKoJcYXp9glH_E"
}
{
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOjE3MTQ3MDAwMDAsInVzZXJfaWQiOjF9.9q5yxTuR1UVgMQ6o0B1q1mMMODQoZFY-KvcszrZuuz4"
}
GET /api/v1/posts/?limit=10&offset=20
{
"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
}
{
"id": 2,
"author": "user1",
"text": "Новая публикация",
"pub_date": "2025-05-03T15:00:00Z",
"image": null,
"group": 1
}
GET /api/v1/posts/2/
{
"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
}
{
"id": 2,
"author": "user1",
"text": "Обновлённый текст публикации",
"pub_date": "2025-05-03T15:00:00Z",
"image": null,
"group": 1
}
DELETE /api/v1/posts/2/
Пустой ответ без тела.
GET /api/v1/posts/2/comments/
[
{
"id": 1,
"author": "user2",
"text": "Отличный пост!",
"created": "2025-05-03T10:30:00Z",
"post": 2
}
]
POST /api/v1/posts/2/comments/
{
"text": "Спасибо за пост!"
}
{
"id": 2,
"author": "user3",
"text": "Спасибо за пост!",
"created": "2025-05-04T09:00:00Z",
"post": 2
}
GET /api/v1/posts/2/comments/2/
{
"id": 2,
"author": "user3",
"text": "Спасибо за пост!",
"created": "2023-01-04T09:00:00Z",
"post": 2
}
PUT /api/v1/posts/2/comments/2/
{
"text": "Исправил свой комментарий"
}
{
"id": 2,
"author": "user3",
"text": "Исправил свой комментарий",
"created": "2025-05-04T09:00:00Z",
"post": 2
}
DELETE /api/v1/posts/2/comments/2/
Пустой ответ без тела.
GET /api/v1/groups/
[
{
"id": 1,
"title": "Путешествия",
"slug": "travel",
"description": "Все о путешествиях"
},
{
"id": 2,
"title": "Технологии",
"slug": "tech",
"description": "Новости из мира IT"
}
]
GET /api/v1/groups/1/
{
"id": 1,
"title": "Путешествия",
"slug": "travel",
"description": "Все о путешествиях"
}
GET /api/v1/follow/
[
{
"user": "user1",
"following": "user2"
}
]
POST /api/v1/follow/
{
"following": "user2"
}
{
"user": "user1",
"following": "user2"
}
Полная документация к API доступна по адресу: