Skip to content

About

FastAPI URL shortener with custom aliases, CRUD endpoints, SQLite, validation, and pytest.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

URL Shortener (Boto test task)

Простое приложение для сокращения ссылок на базе 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

Эндпоинты

POST /shorten

  • Описание: Принимает длинную ссылку и возвращает короткий 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 — внутренняя ошибка сервера.

GET /{code}

  • Описание: Делает редирект по короткому коду.
  • Ответы:
    • 307 — временный редирект на исходный URL (заголовок Location);
    • 404 — код не найден.

Бонусные эндпоинты

POST /shorten/custom

  • Описание: создаёт короткую ссылку с заданным пользователем кодом, если он свободен.
  • Тело запроса (JSON):
{
  "url": "https://example.com/very/long",
  "code": "MyCustom123"
}
  • Коды ответов:
    • 201 — ссылка успешно создана;
    • 400 — невалидный URL или некорректный формат кода (слишком короткий/длинный или недопустимые символы);
    • 409 — код уже занят.

PATCH /links/{code}

  • Описание: обновляет целевой URL для существующей короткой ссылки.
  • Тело запроса (JSON):
{
  "url": "https://example.com/new-target"
}
  • Коды ответов:
    • 200 — ссылка успешно обновлена;
    • 400 — невалидный новый URL;
    • 404 — ссылка с таким кодом не найдена.

DELETE /links/{code}

  • Описание: удаляет ссылку по коду.
  • Коды ответов:
    • 204 — ссылка успешно удалена;
    • 404 — ссылка с таким кодом не найдена.

Примеры запросов (curl)

Создание короткой ссылки:

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-БД и не модифицируют рабочую базу.

About

FastAPI URL shortener with custom aliases, CRUD endpoints, SQLite, validation, and pytest.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages