link-shorter

command module
v0.0.0-...-bfc4fd5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2024 License: MIT Imports: 8 Imported by: 0

README

Сокращатель ссылок

Установка и запуск (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 и т.д.

Особенности:

  1. С сервисом можно работать JSON-запросами, получая JSON в ответ, есть batch-запросы, можно гененировать/получать множесто ссылок.
  2. Все запросы логируются в stdout, невалидные запросы обрабатывабтся, отдаётся корректный ответ.
  3. Поддерживается GZIP-сжатие данных http-запросов.
  4. Может хранить данные в двух режимах:
    • в памяти с синхронным и асинхронным сохранением в файл, при запуске может восстанавливаться из файла, при остановке "дожидается" асинхронных задач
    • в postgreSQL
  5. Может кэшировать данные:
    • в памяти, реализована статегия вытеснения LFU при заполнении кэша.
    • в Redis.
  6. Может ограничивать кол-во запросов к сервису от одного IP, при превышении предела отдаёт HTTP-код 429.
  7. Параметры (тип хранилища, параметры соединения с бд, объём кеша, кол-во запросов) задаются переменными окружения и Args командной строки.
  8. Метрики собираются в Prometheus
Endpoint-ы

см. /docs/swagger.json.

Все входящие ссылки должны быть валидными URL-ами. Ссылки в запросе /batch/generate не должны повторяться.

Лицензия

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
app
Package docs Code generated by swaggo/swag.
Package docs Code generated by swaggo/swag.
internal
db

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL