Тестовое задание. Приложение по укорачиванию ссылок на Go.
В readme есть информация об API приложения и о том, как его можно запустить: локально или в докер-контейнере.
Приложение имеет два основных метода:
Принимает на вход json, в формате:
{
"url": "string"
}
Может возвращать:
-
Код: 200. И json в формате:
{ "short_id": "string" }где short_id - уникальный идентификатор поданой на вход ссылки внутри приложения. Его можно использовать в других ендпоинтах API
-
Код 400. При неверных параметрах json-файла на входе или если "ссылка" на входе имеет невалидный формат.
Принимает на вход shortID в качестве параметра в ссылке. Тело запроса не обязательно для этого метода.
Может возвращать:
- Код: 200. И json в формате:
где original_url - оригинальная ссылка, на которую ссылается короткий идентификатор.
{ "original_url": "string" } - Код 404. Если shortID принципиально валиден, но не содержится в базе данных приложения.
- Код 400. Может возникнуть если поданый на вход shortID невалиден: имеет длину отличную от 10-ти символов/содержит символы, отличные от латинских букв(в обоих регистрах), цифр и нижнего подчёркивая(_).
Аналогично ендпоинту /api/GetOriginal/{shortID}, Принимает на вход shortID в качестве параметра в ссылке.
В случае успеха должен перенаправить пользователя на адрес оригинальной ссылки, на которую ссылается поданый на вход shortID. Если что-то пошло не так может вернуть:
- Код 404. Если shortID принципиально валиден, но не содержится в базе данных приложения.
- Код 400. Может возникнуть если поданый на вход shortID невалиден: имеет длину отличную от 10-ти символов/содержит символы, отличные от латинских букв(в обоих регистрах), цифр и нижнего подчёркивая(_).
-
клонировать репозиторий и убедиться в наличии установленного GO компилятора, например введя в терминал:
go versionЕсли Go не установлен - нужно установить
-
Загрузить необходимые для проекта модули, запустив следующую сомманду из корня проекта в терминале:
go mod download -
Запустить приложение с помощью следующей команды:
go run main.goили
go build . ./LinkShortener
Теперь в приложение можно постучаться по адресу http://localhost:8080/, используя описанный выше API
А так же посмотреть и использовать API через интерфейс сваггера по адресу http://localhost:8080/swagger/index.html
ВАЖНО: При запуске приложения можно указать флаг -storage с двумя возможными опциями:
-storage=file - выбор опции хранить данные в памяти приложения(и записывать в файл при прикращении работы приложения)
либо
-storage=postgres - выбор опции хранения данных в БД на основе postgres. для этой опции необходимо так же удостоверится что на компьютере установлен postgresql. Необходимая для работы приложения БД инициализируется при первом старте приложения и будет использоваться при последующих запусках с этой опцией.
При запуске программы без использования флага автоматически выбирается способ хранения в памяти приложения.
go run main.go -storage=file будет работать аналогично go run main.go
- убедиться, что на устройстве установлен и может работать docker
- открыть терминал, перейти в папку-корень склонированного репозитория и оттуда вызвать команду:
docker compose up --buildпри первом запуске либо без флага--build(по желанию) если приложение ранее запускалось этим способом.
Теперь в приложение можно постучаться по адресу http://localhost:8080/, используя описанный выше API
А так же посмотреть и использовать API через интерфейс сваггера по адресу http://localhost:8080/swagger/index.html
ВАЖНО: При желании можно изменить опцию хранилища данных, изменив параметр STORAGE_TYPE в файле docker-compose.yml.
STORAGE_TYPE: file - выбрать опцию хранить данные в памяти прложения.
STORAGE_TYPE: postgres опцию хранить данные в БД postgres.
Чтобы применить изменение нужно сохранить их в файле и повторно запустить команду docker compose up в терминале.
Честно говоря, тестов мало получилось. Но их можно запустить после шага 2) локального запуска приложения с помощью команды в терминале, запущеной из корня приложения:
go test ./...
Это запустит все представленные в пакетах приоложения тесты.