Cервис для создания сокращенной формы передаваемых URL и анализа активности их использования
- Python3.11
- FastApi
- Postgresql
-
Создать и заполнить .env файл по аналогии с .env.example
-
Запустить контейнер с сервисами
sudo docker-compose up -d --build
- Выполнить миграции
sudo docker-compose exec web alembic upgrade head
- Протестировать работоспособность сервисов можно при помощи команды
sudo docker-compose exec web pytest
Документация в формате Swagger доступна по адресу http://127.0.0.1:8080/api/openapi
Реализовать http-сервис, который обрабатывает поступающие запросы. Сервер стартует по адресу http://127.0.0.1:8080
.
Список необходимых эндпойнтов
- Получить сокращенный вариант переданного URL
POST /
Request
https://...
Метод принимает в теле запроса строку URL для сокращения и возвращает ответ с кодом 201
.
- Вернуть оригинальный URL
GET /<url_id>
Метод принимает в качестве параметра идентификатор сокращенного URL и возвращает ответ с кодом 307
и оригинальным URL в заголовке Location
.
- Вернуть статус использования URL
GET /<url_id>/status?[full-info]&&[max-result=10]&&[offset=0]
Метод принимает в качестве параметра идентификатор сокращенного URL и возвращает информацию о количестве переходов, совершенных по ссылке.
В ответе может содержаться как общее количество совершенных переходов, так и дополнительная детализированная информация о каждом переходе (наличие query-параметра full-info и параметров пагинации):
- время перехода/использования ссылки;
- информация о клиенте, выполнившем запрос;
- Реализуйте middlware, блокирующий доступ к сервису запросов из запрещенных подсетей (black list).
- Реализуйте взаимодействие с сервисом авторизованного пользователя. Пользователь может создавать как приватные, так и публичные ссылки или изменять видимость ссылок. Вызов метода
GET /user/status
возвращает все созданные ранее ссылки в формате:
[
{
"short_id": "<text-id>",
"short_url": "https://...",
"original_url": "https://...",
"type": "<public|private>"
},
...
]