REST API Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° YaMDb β Π±Π°Π·Ρ ΠΎΡΠ·ΡΠ²ΠΎΠ² ΠΎ ΡΠΈΠ»ΡΠΌΠ°Ρ , ΠΊΠ½ΠΈΠ³Π°Ρ ΠΈ ΠΌΡΠ·ΡΠΊΠ΅. (Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ 3 ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² Π―Π½Π΄Π΅ΠΊΡ.ΠΡΠ°ΠΊΡΠΈΠΊΡΠΌ)
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ²Π°Π½ ΠΡΠ°ΡΠ½ΠΈΠΊΠΎΠ² (ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Auth ΠΈ Users) ΠΠ½Π΄ΡΠ΅ΠΉ ΠΡΡΠ³Π»ΠΎΠ² (ΡΠΈΠΌΠ»ΠΈΠ΄, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Categories, Genres ΠΈ Titles) ΠΠΈΡΠ°Π»ΠΈΠΉ ΠΠ»ΠΈΠΌΠΎΠ² (ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Review ΠΈ Comments)
Π‘ΡΠ΅ΠΊ: Python 3.7, Django, DRF, Simple-JWT, PostgreSQL, Docker, nginx, gunicorn.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
API Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° YaMDb. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ:
ΠΡΠ·ΡΠ²Ρ (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΡΠ·ΡΠ², ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ·ΡΠ² ΠΏΠΎ id, ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ·ΡΠ² ΠΏΠΎ id, ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ·ΡΠ² ΠΏΠΎ id)
ΠΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΠΎΡΠ·ΡΠ²Π°ΠΌ (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΊ ΠΎΡΠ·ΡΠ²Ρ ΠΏΠΎ id, ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΎΡΠ·ΡΠ²Π°, ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΎΡΠ·ΡΠ²Π° ΠΏΠΎ id, ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ ΠΎΡΠ·ΡΠ²Ρ ΠΏΠΎ id, ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ ΠΎΡΠ·ΡΠ²Ρ ΠΏΠΎ id)
JWT-ΡΠΎΠΊΠ΅Π½ (ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ confirmation_code Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ email, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ JWT-ΡΠΎΠΊΠ΅Π½Π° Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° email ΠΈ confirmation_code)
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ username, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ username, ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ username, ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ)
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ (ΡΠΈΠΏΡ) ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ, ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ)
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΆΠ°Π½ΡΠΎΠ² (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΆΠ°Π½ΡΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡ ΠΆΠ°Π½Ρ, ΡΠ΄Π°Π»ΠΈΡΡ ΠΆΠ°Π½Ρ)
ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΈΡΡΡ ΠΎΡΠ·ΡΠ²Ρ (ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠ·ΡΠ²ΠΎΠ², ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅)
ΠΠ°ΠΏΡΡΠΊ (docker)
ΠΠ°ΠΏΡΡΡΠΈΡΡ docker-compose:
docker-compose up
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ:
docker-compose exec web python manage.py migrate
Π§ΡΠΎΠ±Ρ Π·Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ½Π³ΡΠ΅Π΄ΠΈΠ΅Π½ΡΠΎΠ² Π² ΠΠ:
docker-compose exec web python manage.py loaddata fixtures.json
Π‘ΠΎΠ±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΠΊΡ:
docker-compose exec web python manage.py collectstatic --no-input
ΠΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: http://51.250.102.144/admin
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°:
-
Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ http://127.0.0.1/api/v1/categories/
-
Π‘ΠΏΠΈΡΠΎΠΊ ΠΆΠ°Π½ΡΠΎΠ² http://127.0.0.1/api/v1/genres/
-
Π‘ΠΏΠΈΡΠΎΠΊ Π½Π°Π·Π²Π°Π½ΠΈΠΉ http://127.0.0.1/api/v1/titles/
-
Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΡΠ·ΡΠ²ΠΎΠ² http://127.0.0.1/api/v1/titles/1/reviews/
-
Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² http://127.0.0.1/api/v1/titles/1/reviews/1/comments/
-
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ http://127.0.0.1/api/v1/users/
-
ΠΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ http://127.0.0.1/api/v1/users/me/
-
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ Π² ΠΊΠΎΠ½Π΅Ρ ΠΏΡΡΠΈ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π΄Π΅ΡΡ: http://127.0.0.1/api/v1/titles/1/reviews/1
-
ΠΠΎΡΠΎΠ²Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅: http://127.0.0.1/redoc