Можете попробовать тут (Swagger UI)
- Регистрация пользователей (
POST /register) - Авторизация с получением JWT токена (
POST /login) - Доступ к защищённым маршрутам осуществляется по токену (формат:
Bearer <token>)
Чтобы авторизоваться:
- Выполните
POST /login, получитеaccess_token- Нажмите Authorize в Swagger UI
- Вставьте токен в формате:
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- Создание короткой ссылки (
POST /links/shorten)
Позволяет создать короткую ссылку с опциональными параметрами:original_url— обязательный оригинальный URLexpires_at— дата и время истечения срока действия ссылкиcustom_alias— собственный алиас (если не указан, будет сгенерирован автоматически)
Даже неавторизованные пользователи могут создать ссылку без входа
Вы можете не заполнятьcustom_alias— система сама сгенерирует уникальный код
Пример запроса:
{
"original_url": "https://www.youtube.com/watch?v=byx6QjKiSUuw",
"custom_alias": "myvideo",
"expires_at": "2025-03-30T23:59"
}Пример ответа:
{
"short_url": "https://shortlink-312j.onrender.com/myvideo",
"created_by": "GreatPopka"
}- Редирект по короткому URL
Любой пользователь может перейти по короткой ссылке:https://shortlink-312j.onrender.com/myalias
-
Автоматическое удаление просроченных ссылок
- Если
expires_atистёк — ссылка считается недействительной - При попытке перехода система может её удалить
- Если
-
Раз в неделю автоматически удаляются неиспользуемые ссылки
- Ссылки, у которых истёк срок действия и не было ни одного перехода (
click_count = 0)
- Ссылки, у которых истёк срок действия и не было ни одного перехода (
GET /links/{short_code}
Позволяет получить исходную (длинную) ссылку по её короткому коду.
Открытый доступ — авторизация не требуется.
Пример запроса:
GET /links/9rSKCPПример ответа (200 OK):
{
"original_url": "https://www.youtube.com/watch?v=byx6QjKiSUuw"
}Если ссылка не найдена или срок действия истёк, будет возвращена ошибка.
DELETE /links/{short_code}
Позволяет авторизованному пользователю удалить свою ссылку по её короткому коду (short_code).
Требуется авторизация — Bearer <access_token>
Пример запроса:
DELETE /links/myc11
Authorization: Bearer <access_token>Пример ответа (200 OK):
{
"message": "Short URL 'myc11' deleted"
}Только владелец ссылки может её удалить.
Если ссылка устарела и не использовалась — она также может быть удалена автоматически системой.
PUT /links/{short_code}
Позволяет обновить оригинальный URL, на который ведёт короткая ссылка.
Требуется авторизация — Bearer <access_token>
Формат запроса:
- Тип содержимого:
application/x-www-form-urlencoded
Пример запроса:
PUT /links/myc11
Authorization: Bearer <access_token>
Content-Type: application/x-www-form-urlencodedТело запроса:
new_original_url=https://www.youtube.com/watch?v=byx6QjKiSUuwПример ответа (200 OK):
{
"short_url": "https://shortlink-312j.onrender.com/myc11"
}Только авторизованный владелец может обновлять ссылку.
Обновление не изменяет короткий код (short_code), а лишь переназначает новыйoriginal_url.
GET /links/{short_code}/stats
Позволяет авторизованному владельцу получить полную статистику по короткой ссылке.
Требуется авторизация — Bearer <access_token>
Пример запроса:
GET /links/myc11/stats
Authorization: Bearer <access_token>Пример ответа (200 OK):
{
"original_url": "https://www.youtube.com/",
"created_at": "2025-03-27T23:06:41.896661",
"click_count": 1,
"last_used_at": "2025-03-27T23:07:15.034103"
}Описание возвращаемых полей:
original_url— исходный URL, на который ведёт короткая ссылкаcreated_at— дата и время создания ссылкиclick_count— количество переходов по ссылкеlast_used_at— дата и время последнего перехода
Только владелец ссылки может получить её статистику. Если ссылка создана анонимно — статистика недоступна.
GET /me/links
Позволяет авторизованному пользователю получить список всех своих созданных ссылок.
Требуется авторизация — Bearer <access_token>
Пример запроса:
GET /me/links
Authorization: Bearer <access_token>Пример ответа (200 OK):
[
{
"short_code": "mycustom1",
"original_url": "https://www.twitch.tv/witchblade1",
"click_count": 0
},
{
"short_code": "myc11",
"original_url": "https://www.youtube.com/",
"click_count": 0
},
{
"short_code": "r9h5KPC",
"original_url": "https://www.youtube.com/watch?v=byx6QjKiSuw",
"click_count": 0
}
]Каждый объект в ответе содержит:
short_code— короткий код ссылкиoriginal_url— исходный URLclick_count— число переходов по ссылке
Эндпоинт полезен для отображения всех ссылок, созданных пользователем, например, в личном кабинете.
- Создание и открытие ссылок — без регистрации
- Управление, удаление, статистика — только для авторизованных пользователей
База данных построена на PostgreSQL, используется SQLAlchemy + asyncpg.
Хранит зарегистрированных пользователей.
| Поле | Тип | Описание |
|---|---|---|
id |
INTEGER | Уникальный ID (Primary Key) |
email |
VARCHAR | Уникальный логин/почта пользователя |
hashed_password |
VARCHAR | Хэшированный пароль |
Пользователи могут:
- создавать, удалять и обновлять свои ссылки;
- просматривать статистику по ним.
Хранит все созданные короткие ссылки, включая ссылки от гостей (неавторизованных пользователей).
| Поле | Тип | Описание |
|---|---|---|
id |
INTEGER | Уникальный ID (Primary Key) |
original_url |
VARCHAR | Исходный URL |
short_code |
VARCHAR(50) | Уникальный код короткой ссылки |
created_at |
TIMESTAMP | Дата создания |
expires_at |
TIMESTAMP | Срок действия ссылки |
click_count |
INTEGER | Количество переходов |
last_used_at |
TIMESTAMP | Дата последнего перехода по ссылке |
user_id |
INTEGER (FK) | ID пользователя (если есть, может быть NULL) |
short_code— уникальный для каждой ссылкиexpires_at— если указан и истёк, ссылка считается неактивнойclick_countиlast_used_atобновляются автоматически при переходахuser_id— может бытьNULL, если ссылка создана анонимно
