Читал про библиотеку dependency-injector от нашего разработчика.
Решил сделать через неё для практики, вот такая солянка получилась)
Спроектируйте и реализуйте сервис для создания сокращённой формы передаваемых URL и анализа активности их использования.
Кроме этого, выберите из списка дополнительные требования и тоже реализуйте их. У каждого задания есть определённая сложность, от которой зависит количество баллов. Вам необходимо выбрать такое количество заданий, чтобы общая сумма баллов была больше 4. Выбор заданий никак не ограничен: можно выбрать все простые или одно среднее и два простых, или одно продвинутое, или решить все.
Реализовать http
-сервис, который обрабатывает поступающие запросы. Сервер стартует по адресу http://127.0.0.1:8080
(значение по умолчанию, можно изменять).
Список возможных эндпойнтов (можно изменять)
- Получить сокращённый вариант переданного URL.
POST /
Метод принимает в теле запроса строку URL для сокращения и возвращает ответ с кодом 201
.
- Вернуть оригинальный URL.
GET /<shorten-url-id>
Метод принимает в качестве параметра идентификатор сокращённого URL и возвращает ответ с кодом 307
и оригинальным URL в заголовке Location
.
- Вернуть статус использования URL.
GET /<shorten-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>"
},
...
]
... и возвращает данные в следующем формате:
[
{
"short-id": "<shoten-id>",
"short-url": "http://...",
},
...
]
- (3 балла) Реализуйте взаимодействие с сервисом авторизованного пользователя. Пользователь может создавать как приватные, так и публичные ссылки или изменять видимость ссылок. Вызов метода
GET /user/status
возвращает все созданные ранее ссылки в формате:
[
{
"short-id": "<text-id>",
"short-url": "http://...",
"original-url": "http://...",
"type": "<public|private>"
},
...
]
- **(5 баллов) Реализуйте кастомное взаимодействия с БД. Необходимо учесть возможность работы с транзакциями.
- Используйте фреймворк FastAPI. В качестве СУБД используйте PostgreSQL (не ниже 10 версии).
- Используйте концепции ООП.
- Предусмотрите обработку исключительных ситуаций.
- Приведите стиль кода в соответствие pep8, flake8, mypy.
- Логируйте результаты действий.
- Покройте написанный код тестами.