Skip to content

Тестовое задание. Приложение по укорачиванию ссылок на Go.

Notifications You must be signed in to change notification settings

MinusOne-1/LinkShortener

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkShortener

Тестовое задание. Приложение по укорачиванию ссылок на Go.

В readme есть информация об API приложения и о том, как его можно запустить: локально или в докер-контейнере.

API

Приложение имеет два основных метода:

POST /api/CreateShorten

Генерирует уникальный 10-символьный идентификатор для указанной ссылки

Принимает на вход json, в формате:

{
  "url": "string" 
}

Может возвращать:

  • Код: 200. И json в формате:

     {
       "short_id": "string"
     }
    

    где short_id - уникальный идентификатор поданой на вход ссылки внутри приложения. Его можно использовать в других ендпоинтах API

  • Код 400. При неверных параметрах json-файла на входе или если "ссылка" на входе имеет невалидный формат.

GET /api/GetOriginal/{shortID}

Возвращает оригинальный url по поданному shortID.

Принимает на вход shortID в качестве параметра в ссылке. Тело запроса не обязательно для этого метода.

Может возвращать:

  • Код: 200. И json в формате:
     {
    "original_url": "string"
     }
    
    где original_url - оригинальная ссылка, на которую ссылается короткий идентификатор.
  • Код 404. Если shortID принципиально валиден, но не содержится в базе данных приложения.
  • Код 400. Может возникнуть если поданый на вход shortID невалиден: имеет длину отличную от 10-ти символов/содержит символы, отличные от латинских букв(в обоих регистрах), цифр и нижнего подчёркивая(_).

GET /{shortID}

Переадресует пользователя на оригинальную ссылку, если это возможно.

Аналогично ендпоинту /api/GetOriginal/{shortID}, Принимает на вход shortID в качестве параметра в ссылке.

В случае успеха должен перенаправить пользователя на адрес оригинальной ссылки, на которую ссылается поданый на вход shortID. Если что-то пошло не так может вернуть:

  • Код 404. Если shortID принципиально валиден, но не содержится в базе данных приложения.
  • Код 400. Может возникнуть если поданый на вход shortID невалиден: имеет длину отличную от 10-ти символов/содержит символы, отличные от латинских букв(в обоих регистрах), цифр и нижнего подчёркивая(_).

Как запустить локально

  1. клонировать репозиторий и убедиться в наличии установленного GO компилятора, например введя в терминал:

    go version

    Если Go не установлен - нужно установить

  2. Загрузить необходимые для проекта модули, запустив следующую сомманду из корня проекта в терминале:

    go mod download

  3. Запустить приложение с помощью следующей команды:

    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 контейнере

  1. убедиться, что на устройстве установлен и может работать docker
  2. открыть терминал, перейти в папку-корень склонированного репозитория и оттуда вызвать команду: 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 в терминале.

Про unit-тесты

Честно говоря, тестов мало получилось. Но их можно запустить после шага 2) локального запуска приложения с помощью команды в терминале, запущеной из корня приложения:

go test ./...

Это запустит все представленные в пакетах приоложения тесты.

About

Тестовое задание. Приложение по укорачиванию ссылок на Go.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors