shorturl

module
v0.0.0-...-e59009a Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2025 License: MIT

README

URL Shortener Service

Сервис для сокращения 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

Конфигурация

Сервис поддерживает несколько способов конфигурации (в порядке приоритета):

  1. Флаги командной строки (высший приоритет)
  2. Переменные окружения
  3. JSON-файл конфигурации
  4. Значения по умолчанию (низший приоритет)
Основные параметры:

Флаги командной строки:

  • -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 - аналог флага -a
  • BASE_URL - аналог флага -b
  • FILE_STORAGE_PATH - аналог флага -f
  • DATABASE_DSN - аналог флага -d
  • ENABLE_HTTPS - аналог флага -s
  • TRUSTED_SUBNET - аналог флага -t
  • CONFIG - аналог флага -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 из материалов курса используется для тестирования

Directories

Path Synopsis
api
cmd
client command
migrator command
shortener command
staticlint command
staticlint/noexitanalyzer
Package noexitanalyzer provides a static analysis analyzer that detects and reports direct calls to os.Exit in the main function of the main package.
Package noexitanalyzer provides a static analysis analyzer that detects and reports direct calls to os.Exit in the main function of the main package.
internal
app
Package app is the root package that composes all application components into a runnable service.
Package app is the root package that composes all application components into a runnable service.
config
Package config provides centralized application configuration management.
Package config provides centralized application configuration management.
contextkeys
Package contextkeys provides type-safe keys for storing values in request context.
Package contextkeys provides type-safe keys for storing values in request context.
db
grpc/interceptors
Package interceptors provides gRPC middleware interceptors for common cross-cutting concerns in the URL shortener service.
Package interceptors provides gRPC middleware interceptors for common cross-cutting concerns in the URL shortener service.
grpc/server
Package server implements the gRPC server handlers for the URL shortener service.
Package server implements the gRPC server handlers for the URL shortener service.
handlers
Package handlers contains HTTP handlers for the URL shortener service API.
Package handlers contains HTTP handlers for the URL shortener service API.
handlers/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
logger
Package logger provides a thread-safe singleton logger instance with centralized configuration for the application.
Package logger provides a thread-safe singleton logger instance with centralized configuration for the application.
middleware
Package middleware provides HTTP middleware handlers for the application.
Package middleware provides HTTP middleware handlers for the application.
middleware/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
models
Package models defines the core data structures used across application layers.
Package models defines the core data structures used across application layers.
services
Package services contains the core business logic layer of the URL shortener application.
Package services contains the core business logic layer of the URL shortener application.
services/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
storage
Package storage provides implementations for URL shortener storage backends.
Package storage provides implementations for URL shortener storage backends.
worker
Package worker implements a background URL deletion processor for the URL shortener service.
Package worker implements a background URL deletion processor for the URL shortener service.
worker/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

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