- 🌟 Особенности
- 🏗 Архитектура
- 🚀 Быстрый старт
- 📦 Установка
- 🔧 Конфигурация
- 📖 API Документация
- 💻 Использование
- 📁 Структура проекта
- 🛠 Технологии
- 🤝 Вклад в проект
- 📄 Лицензия
| Функция | Описание |
|---|---|
| 🚀 Мгновенное сокращение | Создание коротких ссылок за миллисекунды |
| 📊 Встроенная статистика | Отслеживание количества переходов по каждой ссылке |
| 🔒 Безопасность | Потокобезопасное хранилище с поддержкой конкурентных запросов |
| 🎨 Современный UI | Адаптивный дизайн с эффектом стекла и анимациями |
| 🌐 RESTful API | Чистый и интуитивно понятный API интерфейс |
| ⚡ Высокая производительность | Оптимизированный код на Go с минимальным потреблением ресурсов |
graph LR
A[Клиент] -->|POST /api/shorten| B[Go Backend]
B -->|Генерация кода| C[In-Memory Store]
C -->|Сохранение| D[(Хранилище)]
B -->|GET /code| A
A -->|Редирект| E[Оригинальный URL]
style B fill:#6366f1,stroke:#333,stroke-width:2px
style C fill:#10b981,stroke:#333,stroke-width:2px
style D fill:#f59e0b,stroke:#333,stroke-width:2px
style A fill:#8b5cf6,stroke:#333,stroke-width:2px
style E fill:#ef4444,stroke:#333,stroke-width:2px
- Go 1.21 или выше
- Современный браузер (Chrome, Firefox, Safari, Edge)
- Любой HTTP сервер для фронтенда (или просто открыть через Live Server)
# Клонируем репозиторий
git clone https://github.com/maypress/crisp.git
cd crisp-url-shortener
# Запускаем бэкенд
cd back
go run main.go
# В новом терминале запускаем фронтенд (выберите один из способов)
cd ../web
python3 -m http.server 3000
# или
npx serve .
# или используйте Live Server в VS CodeГотово! Откройте http://localhost:3000 и начинайте сокращать ссылки! 🎉
cd back
# Установка зависимостей
go mod init crisp-url-shortener
go mod tidy
# Запуск сервера
go run main.go
# Сборка бинарного файла
go build -o crisp-server main.go
./crisp-servercd web
# Просто скопируйте файлы на ваш веб-сервер
cp index.html style.css script.js /var/www/html/
# Или используйте встроенный сервер Python
python3 -m http.server 3000Создайте файл .env в директории back:
PORT=8080
CORS_ORIGIN=*
DEFAULT_LETTERS_REDIRECT=6
RATE_LIMIT=100В файле main.go вы можете изменить:
const (
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
defaultLettersLength = 6 // Длина короткого кода
)
// Измените порт в функции main
port := ":8080" // Например :9090| Метод | Endpoint | Описание | Тело запроса | Ответ |
|---|---|---|---|---|
POST |
/api/shorten |
Создание короткой ссылки | {"url": "https://example.com"} |
{"success": true, "data": {...}} |
GET |
/api/stats |
Получение всей статистики | - | {"success": true, "data": [...]} |
GET |
/api/stats/{code} |
Статистика по конкретной ссылке | - | {"success": true, "data": {...}} |
GET |
/{code} |
Редирект на оригинальный URL | - | 301 Redirect |
GET |
/health |
Проверка здоровья сервера | - | {"success": true, "data": {...}} |
curl -X POST http://localhost:8080/api/shorten \
-H "Content-Type: application/json" \
-d '{"url": "https://github.com"}'Ответ:
{
"success": true,
"data": {
"shortCode": "aB3xY7",
"shortUrl": "http://localhost:8080/aB3xY7",
"originalUrl": "https://github.com",
"createdAt": 1700000000
}
}curl http://localhost:8080/api/stats/aB3xY7Ответ:
{
"success": true,
"data": {
"shortCode": "aB3xY7",
"originalUrl": "https://github.com",
"clicks": 42
}
}- Вставьте длинную ссылку в поле ввода
- Нажмите "Сократить" или клавишу Enter
- Скопируйте полученную короткую ссылку
- Поделитесь ссылкой с друзьями!
// JavaScript пример
async function shortenUrl(url) {
const response = await fetch('http://localhost:8080/api/shorten', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: url })
});
const data = await response.json();
return data.data.shortUrl;
}
// Использование
const shortUrl = await shortenUrl('https://very-long-url.com');
console.log(shortUrl); // http://localhost:8080/xYz123# Python пример
import requests
def shorten_url(url):
response = requests.post(
'http://localhost:8080/api/shorten',
json={'url': url}
)
return response.json()['data']['shortUrl']
short_url = shorten_url('https://example.com')
print(short_url)BasicUrlShortener/
├── back/ # Бэкенд на Go
│ ├── main.go # Основной сервер
│ └── go.mod # Go модуль
├── web/ # Фронтенд файлы
│ ├── index.html # Главная страница
│ ├── style.css # Стили (Glassmorphism)
│ └── script.js # Клиентская логика
└── README.md # Документация
- Go - Основной язык программирования
- Standard Library - Без внешних зависимостей
- sync.RWMutex - Потокобезопасное хранилище
- HTML5 - Семантическая разметка
- CSS3 - Glassmorphism, анимации, адаптивность
- Vanilla JavaScript - Без фреймворков
- Fetch API - Асинхронные запросы
- ✅ Конкурентно-безопасное хранение данных
- ✅ CORS поддержка для кросс-доменных запросов
- ✅ Валидация URL перед сохранением
- ✅ Генерация уникальных кодов с проверкой коллизий
- ✅ Статистика переходов в реальном времени
- ✅ Адаптивный дизайн под все устройства
Мы приветствуем любой вклад в развитие проекта!
- Форкните репозиторий
- Создайте ветку для вашей фичи:
git checkout -b feature/amazing-feature - Зафиксируйте изменения:
git commit -m 'Add amazing feature' - Запушьте ветку:
git push origin feature/amazing-feature - Откройте Pull Request
- Добавить поддержку баз данных (PostgreSQL, Redis)
- Реализовать пользовательские аккаунты
- Добавить кастомные алиасы для ссылок
- Внедрить QR-коды для ссылок
- Добавить аналитику по геолокации
- Создать Docker образ
- Добавить rate limiting
- Реализовать TTL для ссылок
Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.
Сделано с ❤️ для тех, кто ценит простоту и элегантность
Built with 🚀 by MayPress