URL Shortener
Микросервис для генерации коротких ссылок.
Сгенерированные ссылки закрепляются за пользователем, в ответе в хедере проставляется Cookie
Что умеет:
- сохранять одиночные/множество ссылок
- выдача оригинальных ссылок
- просмотр всех сгенерированных ссылок пользователя (нужен Cookie)
- удаление сгенерированных ссылок пользователем (нужен Cookie)
- поддерживает 3 варианта хранения (postgres, файловое хранение, in-memory)
Используемые технологии:
- PostgreSQL (как одно из хранилищ)
- Docker (для запуска сервиса)
- Chi (роутинг, middlewares)
- golang-migrate/migrate (миграции БД)
- pgx (драйвер для работы с Postgres)
- jwt (генерация токенов в Cookie)
- zerolog (логирование)
- testify (тесты)
Getting Started
Для запуска сервиса необходимо создать и заполнить .env
файл, а также иметь Docker и docker-compose на машине
Usage
запуск сервиса
make up
остановка сервиса
make down
Examples
Примеры запросов:
Генерация короткой ссылки (простая)
Запрос:
curl -v -d "<your_url>" http://localhost:8080
Ответом будет сгенерированная короткая ссылка
Переход по короткой ссылке
Запрос:
curl -v http://localhost:8080/<your_short_url>
Ответом будет редирект на оригинальную ссылку
Генерация короткой ссылки (json)
Запрос:
curl -v -H "Content-Type: application/json" \
-d '{"url": "<your_url>"}' \
http://localhost:8080/api/shorten
Ответом будет сгенерированная короткая ссылка
Массовая(Batch) генерация коротких ссылок
Запрос:
curl -v -H "Content-Type: application/json" \
-d '[{"original_url": "<your_url>", "correlation_id": "<uuid>"}]'
http://localhost:8080/api/shorten/batch
Ответом будет массив коротких ссылок с correlation_id
Получение всех ссылок пользователем
Для доступа к ссылкам необходимо подставить Cookie выданный ранее
Запрос:
curl -v -H "Cookie:<your_cookie>" http://localhost:8080/api/user/urls
Ответом будет все созданные ссылки+короткие для пользователя
Удаление ссылок пользователем
Для доступа необходимо подставить Cookie выданный ранее
Запрос:
curl -v -X DELETE \
-H "Cookie:<your_cookie>" \
-H "Content-Type: application/json" \
-d '["short_url", "short_url"]' \
http://localhost:8080/api/user/urls