Спроектируйте и реализуйте сервис для создания сокращённой формы передаваемых 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).
-
Метод
POST /shorten
принимает в теле запроса список URL в формате:
[
{
"original-url": "<URL-for-shorten>"
},
...
]
- (3 балла) Реализуйте взаимодействие с сервисом авторизованного пользователя. Пользователь может создавать как приватные, так и публичные ссылки или изменять видимость ссылок. Вызов метода
GET /user/status
возвращает все созданные ранее ссылки в формате:
[
{
"short_id": "<text-id>",
"short_url": "http://...",
"original_url": "http://...",
"type": "<public|private>"
},
...
]
пример .env файла:
APP_TITLE="Url Shortener App"
DATABASE_DSN=postgresql+asyncpg://postgres:postgres@localhost:5432/postgres
docker run --rm --name postgres-fastapi -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=collection -d postgres:14.5
docker exec -it postgres-fastapi psql -U postgre
alembic revision --autogenerate -m 01_initial-db
alembic upgrade head
- Используйте фреймворк FastAPI. В качестве СУБД используйте PostgreSQL (не ниже 10 версии).
- Используйте концепции ООП.
- Предусмотрите обработку исключительных ситуаций.
- Приведите стиль кода в соответствие pep8, flake8, mypy.
- Логируйте результаты действий.
- Покройте написанный код тестами.