Укорачиватель ссылок
Необходимо реализовать сервис, который должен предоставлять API по созданию сокращённых ссылок следующего формата:
- Ссылка должна быть уникальной и на один оригинальный URL должна ссылаться только одна сокращенная ссылка.
- Ссылка должна быть длинной 10 символов
- Ссылка должна состоять из символов латинского алфавита в нижнем и верхнем регистре, цифр и символа _ (подчеркивание)
Сервис должен быть написан на Go и принимать следующие запросы по http:
- Метод Post, который будет сохранять оригинальный URL в базе и возвращать сокращённый
- Метод Get, который будет принимать сокращённый URL и возвращать оригинальный URL
Решение должно быть предоставлено в «конечном виде», а именно:
- Сервис должен быть распространён в виде Docker-образа
- В качестве хранилища ожидается использовать in-memory решение И postgresql. Какое хранилище использовать указывается параметром при запуске сервиса.
- Покрыть реализованный функционал Unit-тестами
Результат предоставить в виде публичного репозитория на github.com
Сборка версии с Postgres:
docker build -t short_url . --target=postgres
Сборка версии с Redis (используется как in-memory хранилище):
docker build -t short_url . --target=redis
Запуск: docker run -p 8080:8080 short_url
- Для получения сокращенной ссылки необходимо отправить POST запрос:
Input:
http://localhost:8080/
{
"url": "https://google.com/"
}
Output:
{
"short_url": "localhost:8080/yljUFaK2nd"
}
- Для получения полной ссылки необходимо отправить GET запрос:
Input:
http://localhost:8080/yljUFaK2nd
Output:
{
"full_url": "https://google.com/"
}
К сожалению, полноценно разобраться в unit тестировании в golang и написать хорошие тесты не хватило времени, поэтому тестами покрыта лишь часть кода