В качестве БД используется JSON-файл, в котором каждый элемент содержит в себе поля ID, address и short (идентификатор в БД, адрес исходный и адрес сокращённый).
- Чтобы запустить проект, необходимо прописать в той же папке, что и main.go, [
go run main.go
] - Далее будут доступны три меню на выбор. Чтобы выбрать определённое, необходимо ввести цифру от 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!).
Считываем данные из JSON-файла, расшифровываем их с помощью [json.Unmarshal
] и проверяем, правильно ли расшифровались данные. Затем начинаем процедуру добавления адреса к считанной базе данных. Считываем исходный адрес. К данному адресу начинаем применять алгоритм шифрования base62:
- Предварительно перед считыванем данных из JSON-файла мы создаём словарь, в котором представлено 62 ключа и, значит, 62 элемента для шифрования. Каждый элемент словаря - это символ из последовательности [a..z, A..Z, 0..9]. Каждый ключ - это число от 0 до 62.
- При занесении в БД мы берём следующий идентификатор из JSON после последнего в предыдущей версии БД. Например, последний адрес в БД сейчас под ID == 54. Значит, новый добавится под ID == 55
- После всего этого переводим число (новый, следующий ID, в примере выше - 55) в 62-ичную систему счисления путём получения остатков от деления на 62 каждый раз.
- Переворачиваем полученный массив остатков наоборот и по ключам, соответствующим числам в ревёрснутом массиве, находим буквы для кода.
После полученный от алгоритма адрес добавляется в базу данных новая база записывается в JSON-файл. Всё, теперь можно использовать данную ссылку в Redirect.
Считываем данные из JSON-файла, расшифровываем их с помощью [json.Unmarshal
] и проверяем, правильно ли расшифровались данные. Затем начинаем процедуру добавления адреса к считанной базе данных. Считываем исходный адрес. Затем программа предлагает ввести придуманный нами кастомный адрес. Вводим.
После полученный от алгоритма адрес добавляется в базу данных новая база записывается в JSON-файл. Всё, теперь можно использовать данную ссылку в Redirect.
Поднимается сервер на порту 9090. Чтобы перейти по ссылке, в адресной строке браузера мы вводим [localhost:9090/*сокращённая-ссылка*
] (например, опять же [localhost:9090/the-most-popular-search
]). Осуществляется переход по введённому адресу с последующим поиском PATH от данного URL: функция [findURL
] проходится по всей считанной из JSON-файла БД, находит нужный адрес, берёт из БД настоящую (исходную) ссылку и перенаправляет на неё.
Вот и всё описание работы программы.
- Добавлена валидация URL в функции validateURL. Сначала адрес парсится. Если он не имеет в своём составе SCHEME в виде [
http://
], то добавляем её. Парсим второй раз для окончательной проверки валидности. Адрес обязательно должен быть как минимум двухуровневый (домен верхнего и второго уровней), поэтому проверяем, чтобы точка в адресе была не в начале или в конце, а в середине. Также HOST не должен пустовать (адреса вроде [src/RoFlURL
] не пройдут). Иначе паникуем => возникает ошибка и код ломается. - Добавлена возможность создавать кастомные. Об этом было рассказано выше.