ΠΡΠΎΠ΅ΠΊΡ ΡΠ΅ΡΠ²ΠΈΡΠ° API Π΄Π»Ρ YaMDB - ΡΠΎΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΎΡΠ·ΡΠ²Ρ (Review) ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ (Title) Π² ΡΠ°Π·Π½ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡ ΠΈ ΠΆΠ°Π½ΡΠ°Ρ , Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΠΎΡΠ·ΡΠ²Π°ΠΌ. ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π΄Π΅Π»ΡΡΡΡ Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ (Category) ΠΈ ΠΆΠ°Π½ΡΡ (Genres), ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½, Π½ΠΎ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΆΠ°Π½ΡΠΎΠ², ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ. ΠΠ»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ.ΠΠ»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ JWT-ΡΠΎΠΊΠ΅Π½Ρ.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ REST API CRUD Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ½Π΅Π½ΡΠ΅ΡΡΡ JWT-ΡΠΎΠΊΠ΅Π½. Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΏΠ΅ΡΠΌΠΈΡΠ΅Π½Ρ, ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΎΡ API, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ API. ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ΅Ρ Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ : web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, postgresql-Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΈ nginx-ΡΠ΅ΡΠ²Π΅Ρ.
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Yandex.Cloud. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ CI ΠΈ CD ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠΈ push ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π³Π»Π°Π²Π½ΡΡ Π²Π΅ΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ PEP8 ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ Π°Π²ΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ², Π½Π° git-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ±Π·ΡΠ°Π· web-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Docker ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ DockerHub. Π Π°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π²ΠΌΠ΅ΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° nginx ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ PostgreSQL.
- Python 3.7+
- Docker
- Works on Linux, Windows, macOS
- Python 3.8
- Django 3.2
- Django Rest Framework
- Simple-JWT
- PostreSQL
- Nginx
- Gunicorn
- Docker
- GitHub Actions (CI/CD)
ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π½Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠΉΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅:
git clone https://github.com/Seniacat/API_YaMDB.git
cd API_YaMDB/
ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΠΎΡΡ 8000. PostgreSQL ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π½Π° 5432 ΠΏΠΎΡΡΡ, ΠΎΠ½ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½. CΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» .env Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
cd infra
touch .env
ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ .env ΡΠ°ΠΉΠ» Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ (SECRET_KEY ΡΠΌ. Π² ΡΠ°ΠΉΠ»Π΅ settings.py). ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ .env.example Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
echo DB_ENGINE=django.db.backends.postgresql >> .env
echo DB_NAME=postgres >> .env
echo POSTGRES_PASSWORD=postgres >> .env
echo POSTGRES_USER=postgres >> .env
echo DB_HOST=db >> .env
echo DB_PORT=5432 >> .env
echo SECRET_KEY=************ >> .env
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ (ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° web Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈΠ· DockerHub):
docker-compose up -d
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΏΠ΅ΡΡΠ·Π΅ΡΠ°, ΡΠΎΠ±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΠΊΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΠ:
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py createsuperuser
docker-compose exec web python manage.py collectstatic --no-input
docker-compose exec web python manage.py loaddata fixtures.json
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ API Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»Ρ Π½Π΅Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ° Ρ API Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ΅Π½ΠΈΡ
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°: ΠΠΎΡΡΡΠΏΠ½ΠΎ Π±Π΅Π· ΡΠΎΠΊΠ΅Π½Π°.
GET /api/v1/categories/ - ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ
GET /api/v1/genres/ - ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΆΠ°Π½ΡΠΎΠ²
GET /api/v1/titles/ - ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ
GET /api/v1/titles/{title_id}/reviews/ - ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΎΡΠ·ΡΠ²ΠΎΠ²
GET /api/v1/titles/{title_id}/reviews/{review_id}/comments/ - ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΊ ΠΎΡΠ·ΡΠ²Ρ
- Anonymous β ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ, ΡΠΈΡΠ°ΡΡ ΠΎΡΠ·ΡΠ²Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (user) β ΠΌΠΎΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΈ ΠΠ½ΠΎΠ½ΠΈΠΌ, ΡΠΈΡΠ°ΡΡ Π²ΡΡ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΎΡΠ·ΡΠ²Ρ ΠΈ ΡΡΠ°Π²ΠΈΡΡ ΠΎΡΠ΅Π½ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡΠΌ (ΡΠΈΠ»ΡΠΌΠ°ΠΌ/ΠΊΠ½ΠΈΠ³Π°ΠΌ/ΠΏΠ΅ΡΠ΅Π½ΠΊΠ°ΠΌ), ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΆΠΈΠ΅ ΠΎΡΠ·ΡΠ²Ρ; ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ²ΠΎΠΈ ΠΎΡΠ·ΡΠ²Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. Π ΠΎΠ»Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- ΠΠΎΠ΄Π΅ΡΠ°ΡΠΎΡ (moderator) β ΠΎΠ±Π»Π°Π°Π΄Π΅Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ + ΠΏΡΠ°Π²ΠΎ ΡΠ΄Π°Π»ΡΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΡΠ·ΡΠ²Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
- ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ (admin) β ΠΏΠΎΠ»Π½ΡΠ΅ ΠΏΡΠ°Π²Π° Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈ ΠΆΠ°Π½ΡΡ, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΡΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ email. ΠΠΎΠ»Ρ email ΠΈ username Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ.
POST /api/v1/auth/signup/
{
"email": "string",
"username": "string"
}
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JWT-ΡΠΎΠΊΠ΅Π½Π° Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
POST /api/v1/auth/token/
{
"username": "string",
"confirmation_code": "string"
}
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ:
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°: user
GET api/v1/users/me/
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ:
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°: admin
POST /api/v1/categories/
{
"name": "string",
"slug": "string"
}
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠ°Π½ΡΠΎΠ²:
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°: admin
POST /api/v1/genres/
{
"name": "string",
"slug": "string"
}
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ:
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°: admin
POST /api/v1/titles/
PATCH /api/v1/titles/{titles_id}/
{
"name": "string",
"year": 0,
"description": "string",
"genre": [
"string"
],
"category": "string"
}
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ
DELETE /api/v1/titles/{titles_id}/
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ½Π΄ΠΏΠΎΠΉΠ½ΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ:
/redoc/