This repository is for userver v2.8 or older versions. For newer versions of userver please use userver-create-service script.
Высокопроизводительный асинхронный сокращатель ссылок на базе фреймворка userver.
-
Blacklist Filtering: Быстрая фильтрация вредоносных доменов с использованием Hash Set (
std::unordered_set) — сложность поиска$O(1)$ . -
Thread-safe Storage: Хранилище в памяти с использованием
std::shared_mutex(Read-Write Lock) для обеспечения конкурентного доступа. -
HTTP API: -
POST /v1/shorten— создание ссылки.-
GET /v1/shorten— редирект (302 Found).
-
- Testing: Покрытие базовых сценариев (создание, редирект, черный список) через pytest.
Сервис построен на базе userver, который стабильно работает на большинстве Linux-дистрибутивов (Ubuntu, Fedora, Debian, Alpine). Хотя основной метод запуска — Docker, возможна локальная сборка на поддерживаемых системах
склонировать репозиторий:
git clone https://github.com/Arkilleru/url-shortener.git
Параметр PRESET определяет режим сборки: debug (для отладки) или release (для максимальной производительности).
-
make cmake-PRESET— запустить настройку CMake, обновить параметры и списки исходных файлов. -
make build-PRESET— собрать сервис (компиляция). -
make test-PRESET— собрать сервис и запустить все тесты. -
make start-PRESET— собрать сервис и оставить его запущенным в тестовом окружении. -
make install-PRESET— установить собранный проект в директорию PREFIX. -
make format— автоматически отформатировать весь исходный код (C++ и Python). -
make dist-clean— полная очистка: удалить файлы сборки и кэш CMake. -
make docker-COMMAND— запустить любую из вышеперечисленных команд внутри Docker-контейнера (например, make docker-test-debug). -
make docker-clean-data— остановить и удалить Docker-контейнеры проекта
Для тестирования используйте утилиту curl в терминале. Если запуск идёт с использованием докер контейнера, то команды вводятся только в терминале самого контейнера.
Отправьте URL, который хотите сократить. В ответ сервис пришлет ID вашей ссылки.
curl -i -X POST "http://localhost:8080/v1/shorten?url=[https://google.com](https://google.com)"Проверьте редирект (302 Found) на оригинальный сайт.
curl -i -X GET "http://localhost:8080/v1/shorten?id=ID""The original template is distributed under the Apache-2.0 License and CLA. Services based on the template may change the license and CLA.