Сокращатель ссылок
Установка и запуск (docker)
- Скопировать
.env.example
в .env
make build up migrate down
make up
Установка и запуск (нативно)
Установка и запуск (нативно)
Требования
Установка и запуск
go migrate -path=./migrations -database=postgres://user:password@host:5432/short_links?sslmode=disable up
(заменить user
, password
, host
требуемыми значениями)
go run .
(go run . -help
для просмотра опций)
Тесты и линтеры
make test
make test-coverage
make lint
Описание
Простой сокращатель ссылок, преобразует ссылку, например https://github.com/dzhdmitry?tab=repositories&language=go,
в короткую ссылку вида http://host/d3s
.
Для каждой ссылки генерируется кототкий уникальный токен, состоящий из набора [0-9a-z] и получающийся путём применения биективной функции к порядковому номеру ссылки.
То есть, для 1-й ссылки будет токен 1
, для 10-й - a
, для 10000-й - 7ps
и т.д.
При поиске полной ссылки её номер получается обратным преобразованием: 7ps
-> №10000, d3s4c
-> №22011420 и т.д.
Особенности:
- С сервисом можно работать JSON-запросами, получая JSON в ответ, есть batch-запросы, можно гененировать/получать множесто ссылок.
- Все запросы логируются в stdout, невалидные запросы обрабатывабтся, отдаётся корректный ответ.
- Поддерживается GZIP-сжатие данных http-запросов.
- Может хранить данные в двух режимах:
- в памяти с синхронным и асинхронным сохранением в файл, при запуске может восстанавливаться из файла, при остановке "дожидается" асинхронных задач
- в postgreSQL
- Может кэшировать данные:
- в памяти, реализована статегия вытеснения LFU при заполнении кэша.
- в Redis.
- Может ограничивать кол-во запросов к сервису от одного IP, при превышении предела отдаёт HTTP-код 429.
- Параметры (тип хранилища, параметры соединения с бд, объём кеша, кол-во запросов) задаются переменными окружения и Args командной строки.
- Метрики собираются в Prometheus
Endpoint-ы
см. /docs/swagger.json
.
Все входящие ссылки должны быть валидными URL-ами.
Ссылки в запросе /batch/generate
не должны повторяться.
Лицензия
MIT