Skip to content

alexlighting/urlshortener

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сервис для сокращения URL-адресов

Цель задания

Создать веб-сервис для сокращения URL-адресов с полным покрытием unit-тестами и тестами HTTP-обработчиков.

Задача

Необходимо разработать HTTP-сервис, который принимает длинные URL и возвращает короткие идентификаторы, а также выполняет обратное преобразование.

Подробное описание задачи

Функциональные требования:

Сервис должен предоставлять два HTTP-эндпоинта:

POST /shorten - сокращение URL:

  • принимает JSON: {“url”: “example.com.../long/path”};
  • возвращает JSON: {“short_url”: “abc123”, “original_url”: “example.com.../long/path”};
  • генерирует уникальный короткий идентификатор (6-8 символов).

GET /{short_url} - получение оригинального URL:

  • принимает короткий идентификатор в пути;
  • возвращает HTTP 302 редирект на оригинальный URL;
  • при отсутствии URL возвращает 404.

Технические требования:

  • Хранение данных в памяти (map).
  • Валидация входящих URL (должны быть корректными HTTP/HTTPS адресами).
  • Обработка ошибок (некорректный JSON, невалидный URL, отсутствующий short_url).
  • Генерация уникальных коротких идентификаторов.

Обязательные конструкции:

  • Table-driven tests для тестирования бизнес-логики.
  • httptest для тестирования HTTP-обработчиков.
  • t.Run для организации под-тестов.
  • Покрытие тестами не менее 80% для бизнес-логики.

Результаты выполнения задания

Разработанный веб-сервис фактически представляет собой заготовку для микросервиса. Для его коммерческого использования в таком качестве фактически требуется произвести следующие доработки:

  • Заменить хранение мапы URl c in-memory на любую любую восстановимую при перезапуске (файл, БД и т.д.).
  • Добавить логирование.
  • Добавить реализацию Gracefull shutdown для того чтобы при остановке микросервиса данные были корректно сохранены.

About

Сервис для сокращения URL-адресов. Unit и table-driven тестирование

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages