Простое приложение для сокращения ссылок на базе FastAPI и sqlite3.
- Python 3.12+
- pip
Рекомендуется использовать виртуальное окружение (venv или аналог).
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"Из корня проекта:
uvicorn app.main:app --reloadПо умолчанию сервер будет доступен по адресу http://127.0.0.1:8000.
Документация OpenAPI от FastAPI будет доступна по адресу:
- Swagger UI:
http://127.0.0.1:8000/docs - ReDoc:
http://127.0.0.1:8000/redoc
- Описание: Принимает длинную ссылку и возвращает короткий URL.
- Тело запроса (JSON):
{
"url": "https://example.com/very/long"
}- Успешный ответ 201 (JSON):
{
"short_url": "http://127.0.0.1:8000/abc123",
"code": "abc123"
}- Коды ответов:
201— ссылка успешно сокращена;400— невалидный URL;500— внутренняя ошибка сервера.
- Описание: Делает редирект по короткому коду.
- Ответы:
307— временный редирект на исходный URL (заголовокLocation);404— код не найден.
- Описание: создаёт короткую ссылку с заданным пользователем кодом, если он свободен.
- Тело запроса (JSON):
{
"url": "https://example.com/very/long",
"code": "MyCustom123"
}- Коды ответов:
201— ссылка успешно создана;400— невалидный URL или некорректный формат кода (слишком короткий/длинный или недопустимые символы);409— код уже занят.
- Описание: обновляет целевой URL для существующей короткой ссылки.
- Тело запроса (JSON):
{
"url": "https://example.com/new-target"
}- Коды ответов:
200— ссылка успешно обновлена;400— невалидный новый URL;404— ссылка с таким кодом не найдена.
- Описание: удаляет ссылку по коду.
- Коды ответов:
204— ссылка успешно удалена;404— ссылка с таким кодом не найдена.
Создание короткой ссылки:
curl -X POST "http://127.0.0.1:8000/shorten" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'Редирект по коду:
curl -I "http://127.0.0.1:8000/abc123"Тесты написаны на pytest.
pytestТесты используют отдельную временную sqlite-БД и не модифицируют рабочую базу.