Это тестовое задание для стажировки по направлению Go-разработка в компании Ozon Fintech. Задача состоит в реализации сервиса, предоставляющего API для создания сокращенных URL.
-
API реализовано через gRPC с двумя эндпоинтами
CreateShortUrl(OriginalUrl) ShortUrl
иGetOriginalUrl(ShortUrl) OriginalUrl
.Полная спецификация доступна в файле
url_shortener.proto
в директорииinternal/proto
. -
Сервис предоставляет возможность генерации уникальной сокращенной ссылки для предложенного URL. Программа генерирует случайный суффикс длиной 10 символов и добавляет его к базовой ссылке, указанной в параметрах запуска сервиса
-
На сервере реализовано логгирование запросов, ответов и ошибок в формате JSON.
-
Реализован Rate Limit Interceptor для ограничения числа запросов к сервису.
-
Установлены ограничения на открытые и простаивающие подключения к PostgreSQL.
-
Основной функционал API покрыт Unit-тестами
-
Добавлена возможность выбора хранилища через аргументы командной строки: in-memory или PostgreSQL. По умолчанию используется in-memory хранилище
-
Вся конфигурация сервиса происходит через аргументы командной строки, нужные данные подаются через переменные окружения при сборке Docker образа. Вы можете посмотреть все доступный аргументы с помощью команды
make flags/api
. Учтите, что для этого у вас должен быть установлен компилятор Go и требуемые зависимости.
Чтобы запустить проект с помощью Docker Compose, выполните следующие шаги:
-
Склонируйте репозиторий:
git clone https://github.com/NikitaShlyakhtin/url-shortener
-
Перейдите в директорию проекта:
cd url-shortener
-
Запустите одну из следующих команд:
-
Чтобы собрать и запустить API с in-memory хранилищем данных и mock-клиентом:
docker-compose -f docker-compose.yml -f docker-compose.client.yml up --build
-
Чтобы собрать и запустить API с PostgreSQL базой данных и mock-клиентом:
docker-compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.client.yml up --build
Если вам не нужен mock-клиент достаточно убрать часть
-f docker-compose.client.yml
из командыДля запуска на ubuntu возможно потребуется добавить
sudo
перед командой -
-
Дождитесь появления сообщения от контейнера
mock_client
, сигнализирующего о начале работы клиента. Это может занять до 20 секунд из-за задержки в проверке работоспособности API. -
В другом окне терминала подключитесь к контейнеру с mock-клиентом с помощью команды:
docker attach $(docker ps -a -q --filter ancestor=url-shortener-mock_client --format="{{.ID}}")
Либо вы можете получить список активный контейнеров через
docker ps
, скопировать id контейнера с префиксомurl-shortener_mock_client
и подключиться к нему черезdocker attach <id>
Далее вы можете протестировать API используя команды:
create;<original_url>
- создание уникальной сокращенной ссылкиget;<short_url>
- получение оригинальной ссылки по сокращеннойКоманды считываются через
stdin
контейнера с mock-клиентом.