Создать веб-сервис для сокращения 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 для того чтобы при остановке микросервиса данные были корректно сохранены.