Сервис для сокращения URL-адресов.
- Сокращение URL через различные интерфейсы:
POST /- текстовый форматPOST /api/shorten- JSON форматPOST /api/shorten/batch- пакетное сокращение URL
- Перенаправление по коротким ссылкам:
GET /{id} - Управление ссылками пользователя:
GET /api/user/urls- получение всех сокращённых URL пользователяDELETE /api/user/urls- асинхронное удаление URL
- Статистика:
GET /api/internal/stats(только для доверенных подсетей) - Проверка соединения с БД:
GET /ping - Поддержка gRPC - все операции доступны также через gRPC
- Конфигурация через флаги, переменные окружения и JSON-файлы
- Поддержка нескольких хранилищ:
- PostgreSQL (основное)
- Файловое хранилище (JSON)
- In-memory хранилище
- Сжатие данных (gzip) для запросов и ответов
- Аутентификация пользователей через подписанные куки
- Логирование запросов и ответов
- Graceful shutdown
- Поддержка HTTPS
- Статический анализ кода
# Сборка
go build -o shortener ./cmd/shortener
# Запуск с конфигурацией по умолчанию
./shortener
# Запуск с кастомным адресом
./shortener -a localhost:8080 -b http://localhost:8080# Сокращение URL
curl -X POST -d "https://example.com" http://localhost:8080/
# Сокращение через JSON API
curl -X POST -H "Content-Type: application/json" \
-d '{"url":"https://example.com"}' \
http://localhost:8080/api/shorten
# Получение оригинального URL
curl -v http://localhost:8080/{short_id}
# Пакетное сокращение
curl -X POST -H "Content-Type: application/json" \
-d '[{"correlation_id":"1","original_url":"https://example1.com"}]' \
http://localhost:8080/api/shorten/batchСервис поддерживает несколько способов конфигурации (в порядке приоритета):
- Флаги командной строки (высший приоритет)
- Переменные окружения
- JSON-файл конфигурации
- Значения по умолчанию (низший приоритет)
Флаги командной строки:
-a- адрес запуска HTTP-сервера (по умолчанию:localhost:8080)-b- базовый адрес результирующего сокращённого URL-f- полное имя файла для хранения данных в формате JSON (по умолчанию:/tmp/short-url-db.json)-d- строка подключения к базе данных PostgreSQL-s- включение HTTPS (true/false)-t- доверенная подсеть в формате CIDR для доступа к статистике-c/-config- путь к JSON-файлу конфигурации
Переменные окружения:
SERVER_ADDRESS- аналог флага-aBASE_URL- аналог флага-bFILE_STORAGE_PATH- аналог флага-fDATABASE_DSN- аналог флага-dENABLE_HTTPS- аналог флага-sTRUSTED_SUBNET- аналог флага-tCONFIG- аналог флага-c
Пример JSON-конфигурации:
{
"server_address": "localhost:8080",
"base_url": "http://localhost:8080",
"file_storage_path": "/tmp/short-url-db.json",
"database_dsn": "postgres://user:pass@localhost:5432/db",
"enable_https": false,
"trusted_subnet": "192.168.1.0/24"
}MIT License
Создано на основе учебного шаблона курса «Продвинутый Go-разработчик» (Яндекс Практикум). Клиент cmd/client из материалов курса используется для тестирования