API Yatube — это REST API для социальной сети блогов Yatube. Проект позволяет взаимодействовать с платформой из любых клиентских приложений.
С помощью этого API пользователи могут:
- Просматривать, создавать, редактировать и удалять свои публикации.
- Просматривать доступные сообщества.
- Читать и оставлять комментарии к публикациям.
- Подписываться на других авторов и просматривать свои подписки.
Ключевые особенности:
- Аутентификация реализована с использованием JWT-токенов.
- Анонимным пользователям доступен только просмотр контента (постов, групп, комментариев).
- Изменение и удаление контента разрешено только его авторам.
- Эндпоинт подписок (
/follow/) доступен только авторизованным пользователям и имеет встроенный поиск по авторам. - Реализована пагинация для выдачи большого количества постов.
- Python 3.10
- Django 3.2
- Django REST Framework
- Djoser & djangorestframework-simplejwt
- SQLite3
- Клонируйте репозиторий на свой компьютер:
git clone <ссылка_на_ваш_репозиторий>
cd yatube_api- Создайте и активируйте виртуальное окружение:
- Для Windows:
python -m venv venv
source venv/Scripts/activate- Для Linux/macOS:
python3 -m venv venv
source venv/bin/activate- Установите зависимости:
pip install -r requirements.txt- Выполните миграции базы данных:
python manage.py migrate- Запустите локальный сервер:
python manage.py runserverПроект будет доступен по адресу: http://127.0.0.1:8000/.
Полная документация API в формате ReDoc доступна по адресу: http://127.0.0.1:8000/redoc/.
Запрос: POST /api/v1/jwt/create/
{
"username": "test_user",
"password": "test_password123"
}Ответ (200 OK):
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbG...",
"access": "eyJ0eXAiOiJKV1QiLCJhbGc..."
}Полученный access токен необходимо передавать в заголовке Authorization: Bearer <токен> для всех защищенных эндпоинтов.
Запрос: GET /api/v1/posts/
(Возможна пагинация при передаче параметров ?limit=10&offset=0)
Ответ (200 OK):
[
{
"id": 1,
"author": "test_user",
"text": "Мой первый пост через API!",
"pub_date": "2023-10-25T14:30:00Z",
"image": null,
"group": null
}
]Запрос: POST /api/v1/posts/{post_id}/comments/
Заголовок: Authorization: Bearer <токен>
{
"text": "Отличный пост, продолжай в том же духе!"
}Ответ (201 Created):
{
"id": 5,
"author": "test_user",
"text": "Отличный пост, продолжай в том же духе!",
"created": "2023-10-25T15:00:00Z",
"post": 1
}Запрос: POST /api/v1/follow/
Заголовок: Authorization: Bearer <токен>
{
"following": "another_author_username"
}Ответ (201 Created):
{
"user": "test_user",
"following": "another_author_username"
}