URL shortener (“сокращатель ссылок”) - это сервис, позволяющий пользователю генерировать для произвольного URL’a его короткую версию, которую удобно вставлять в различные публикации, сообщения, новости, промо-материалы и так далее. Также сервис позволяет получать статистику переходов по каждому сгенерированному URL’у, что будет полезно, если его владелец захочет узнать сколько людей перешло по короткой ссылке из конкретного источника.
Описание, список возможных операции, которые будут соврешать наше приложение:
- Создание ссылки, на входе передаем исходный url ссылки, кодируем и возвращаем короткий url, возвращаем url для просмотра статистики по созданной ссылке.
- Переход по короткой ссылке, осуществляем редирект на исходный url, увеличиваем счетчик переходов, делаем запись в лог переходов.
- Просмотр, выдача статистики по ссылке:
Карточка ссылки:
- Исходный url ссылки - origin url
- Короткий url - short url
- Дата создания ссылки - created at
- Количество переходов - redirect count.
- Ссылка на лог статистики - stats id
При переходе по короткой ссылке:
-
Определить и записать referrer
-
Определить и записать location ip
-
Увеличить счетчик переходов по ссылке.
-
Сделать новую запись в лог
-
Осуществить редирект на оригинальную ссылку.
-
Лог пееходов может содержать: id ссылки, дата перехода, источник хост, IP, Источник перехода? Referers, IP адрес хоста с которго был произведен клик по ссылке Location.
-
Показать список всех записей лога по короткой ссылке.
Models: link, stats
Роутером проекта выбран роутер go-chi/chi, так как он позволяет:
- Устанавливать продвинутые правила маршрутизации запросов, при этом сохраняя компактность и удобность интерфейса, подобный тому, который предоставляет пакет net/http.
- Примеры кода с этим роутером мне показались более понятны. В Readme.md и в _examples понятно описанное API.
- Роутер активно развивается v5.0.4 от 25 авг. 2021г., а, например, gorilla/mux v1.8.0 от 22 авг. 2020г.
- Судя по отзывам и рекомендациям коллег, для него есть достаточно хороший кодогенаратор основанный на OpenaAPI 3.0 - deepmap/oapi-codegen, который я так же собираюсь подключить и опробовать в проекте.
- Выбрать и реализовать алгоритм кодирования ссылки.
- Решить нужен ли логин для просмотра статистики, админка.
- Для просмотр списка всех ссылок. решить нужен ли фильтр по исходному url ссылки. Фильтр можно вынести на фронтенд.
https://golangci-lint.run/usage/install/#local-installation
Changelog:
- Golangci lint is enabled
- Pre-commit is installed and the git hook scripts are configured
- GitHub Actions are configured