Спроектируйте и реализуйте сервис для создания сокращенной формы передаваемых URL и анализа активности их использования.
Кроме этого, выберите из списка дополнительные требования и тоже реализуйте их. У каждого задания есть определённая сложность, от которой зависит количество баллов. Вам необходимо выбрать такое количество заданий, чтобы общая сумма баллов была больше 4. Выбор заданий никак не ограничен: можно выбрать все простые или одно среднее и два простых, или одно продвинутое, или решить все.
-
Создать и заполнить .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 и параметров пагинации):
- время перехода/использования ссылки;
- информация о клиенте, выполнившем запрос;
-
(1 балл) Реализуйте метод
GET /ping
, который возвращает информацию о статусе доступности БД. -
(1 балл) Реализуйте возможность "удаления" сохраненного URL. Запись должна оставаться, но помечаться как удаленная. При попытке получения полного URL возвращать ответ с кодом
410 Gone
. -
(2 балла) Реализуйте middlware, блокирующий доступ к сервису запросов из запрещенных подсетей (black list).
-
(2 балла) Реализуйте возможность передавать ссылки пачками (batch upload).
Описание изменений
- Метод
POST /shorten
принимает в теле запроса список URL в формате:
[
{
"original_url": "URL for shorten"
},
...
]
и возвращает данные в формате:
[
{
"url_id": "<text-id>",
"short_url": "https://...",
},
...
]
- (3 балла) Реализуйте взаимодействие с сервисом авторизованного пользователя. Пользователь может создавать как приватные, так и публичные ссылки или изменять видимость ссылок. Вызов метода
GET /user/status
возвращает все созданные ранее ссылки в формате:
[
{
"short_id": "<text-id>",
"short_url": "https://...",
"original_url": "https://...",
"type": "<public|private>"
},
...
]
- **(5 баллов) Реализовать кастомную реализацию взаимодействия с БД. Учесть возможность работы с транзакциями.
- Используйте фреймворк FastAPI. В качестве СУБД используйте PostgreSQL (не ниже 10).
- Используйте концепции ООП.
- Предусмотрите обработку исключительных ситуаций.
- Приведите стиль кода в соответствие pep8, flake8, mypy.
- Логируйте результаты действий.
- Покройте написанный код тестами.