Skip to content

LeoStars/urlShortenerJSON

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

urlShortener

Краткое описание работы:

В качестве БД используется JSON-файл, в котором каждый элемент содержит в себе поля ID, address и short (идентификатор в БД, адрес исходный и адрес сокращённый).

  1. Чтобы запустить проект, необходимо прописать в той же папке, что и main.go, [go run main.go]
  2. Далее будут доступны три меню на выбор. Чтобы выбрать определённое, необходимо ввести цифру от 1 до 3, соответствующую нужному пункту меню:
  • 1 - Decode your URL - декодирует введённый нами URL адрес по алгоритму base62, который будет описан ниже. Например, из google.com в [localhost:9090//c], где [c] - сокращённая ссылка.
  • 2 - Create custom URL - создаёт короткую ссылку вида, которого мы захотим. Например, из google.com в [localhost:9090/the-most-popular-search], где [the-most-popular-search] - сокращённая (нет:)) ссылка, придуманная нами.
  • 3 - Redirect - перенаправление с введённого нами сокращённого адреса на исходный, если он есть в базе. Если нет, то будет "страница недоступна", а сайт не откроется. Чтобы осуществить переход, нужно в строке браузера ввести [localhost:9090/*сокращённая-ссылка*] (при запущенном коде и выбранном пункте Redirect!).

Подробное опсание работы

Decode your URL

Считываем данные из JSON-файла, расшифровываем их с помощью [json.Unmarshal] и проверяем, правильно ли расшифровались данные. Затем начинаем процедуру добавления адреса к считанной базе данных. Считываем исходный адрес. К данному адресу начинаем применять алгоритм шифрования base62:

  1. Предварительно перед считыванем данных из JSON-файла мы создаём словарь, в котором представлено 62 ключа и, значит, 62 элемента для шифрования. Каждый элемент словаря - это символ из последовательности [a..z, A..Z, 0..9]. Каждый ключ - это число от 0 до 62.
  2. При занесении в БД мы берём следующий идентификатор из JSON после последнего в предыдущей версии БД. Например, последний адрес в БД сейчас под ID == 54. Значит, новый добавится под ID == 55
  3. После всего этого переводим число (новый, следующий ID, в примере выше - 55) в 62-ичную систему счисления путём получения остатков от деления на 62 каждый раз.
  4. Переворачиваем полученный массив остатков наоборот и по ключам, соответствующим числам в ревёрснутом массиве, находим буквы для кода.

После полученный от алгоритма адрес добавляется в базу данных новая база записывается в JSON-файл. Всё, теперь можно использовать данную ссылку в Redirect.

Create custom URL

Считываем данные из JSON-файла, расшифровываем их с помощью [json.Unmarshal] и проверяем, правильно ли расшифровались данные. Затем начинаем процедуру добавления адреса к считанной базе данных. Считываем исходный адрес. Затем программа предлагает ввести придуманный нами кастомный адрес. Вводим.

После полученный от алгоритма адрес добавляется в базу данных новая база записывается в JSON-файл. Всё, теперь можно использовать данную ссылку в Redirect.

Redirect

Поднимается сервер на порту 9090. Чтобы перейти по ссылке, в адресной строке браузера мы вводим [localhost:9090/*сокращённая-ссылка*] (например, опять же [localhost:9090/the-most-popular-search]). Осуществляется переход по введённому адресу с последующим поиском PATH от данного URL: функция [findURL] проходится по всей считанной из JSON-файла БД, находит нужный адрес, берёт из БД настоящую (исходную) ссылку и перенаправляет на неё.

Вот и всё описание работы программы.

Усложнения

  1. Добавлена валидация URL в функции validateURL. Сначала адрес парсится. Если он не имеет в своём составе SCHEME в виде [http://], то добавляем её. Парсим второй раз для окончательной проверки валидности. Адрес обязательно должен быть как минимум двухуровневый (домен верхнего и второго уровней), поэтому проверяем, чтобы точка в адресе была не в начале или в конце, а в середине. Также HOST не должен пустовать (адреса вроде [src/RoFlURL] не пройдут). Иначе паникуем => возникает ошибка и код ломается.
  2. Добавлена возможность создавать кастомные. Об этом было рассказано выше.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages