Sqids .NET: Как превратить числа в короткие и красивые ID
Когда вы в последний раз видели в URL что-то вроде ?id=12345 и думали: «Как же это неэлегантно»? Согласитесь, числовые идентификаторы в адресах выглядят не только некрасиво, но и могут раскрывать внутреннюю структуру вашей базы данных. Именно эту проблему решает Sqids — маленькая, но очень полезная библиотека для .NET.
Что такое Sqids?
Sqids (произносится как «squids») — это библиотека, которая превращает числа в короткие строки, похожие на те, что вы видите в YouTube (dQw4w9WgXcQ). Например, число 127 превращается в yc3, а [1, 2, 3] — в 86Rf07. При этом вы всегда можете декодировать эти строки обратно в исходные числа.
Зачем это нужно?
- Красивые URL: Вместо
product/123получаемproduct/yc3 - Скрытие структуры: Никто не узнает, сколько всего записей в вашей базе
- Безопасность: Нет риска «перебора» последовательных ID
- Универсальность: Можно кодировать несколько чисел в одну строку
Главные возможности
1. Коллизии? Нет, не слышали
Sqids гарантирует, что разные числа всегда дают разные строки, и наоборот. Более того, вы можете настроить собственный алфавит, чтобы ваши ID отличались от ID других приложений:
var sqids = new SqidsEncoder<int>(new()
{
Alphabet = "mTHivO7hx3RAbr1f586SwjNnK2lgpcUVuG09BCtekZdJ4DYFPaWoMLQEsXIqyz",
});
2. Прощай, матерные слова
Библиотека автоматически фильтрует нежелательные комбинации символов. Ваши URL никогда не будут содержать ничего неприличного, даже если случайно сгенерируют такое сочетание.
3. Не просто цифры
Sqids поддерживает все целочисленные типы .NET — от byte до ulong. А если вам нужна минимальная длина ID, просто укажите её:
var sqids = new SqidsEncoder<int>(new() { MinLength = 5 });
Как это работает под капотом?
Библиотека использует:
- Generic math из .NET 7 для поддержки всех числовых типов
- Span-based реализацию для максимальной производительности
- Оптимизированные алгоритмы для минимизации размера ID
Практические примеры
1. Генерация ID для URL
var sqids = new SqidsEncoder<int>();
var productId = 42;
var url = $"/product/{sqids.Encode(productId)}"; // "/product/8x"
2. Декодирование в контроллере
public IActionResult GetProduct(string id)
{
if (sqids.Decode(id) is [var productId] &&
id == sqids.Encode(productId))
{
// Ищем товар по ID
return Ok(FindProduct(productId));
}
return NotFound();
}
3. Кодирование нескольких чисел
var ids = sqids.Encode(1, 2, 3); // "86Rf07"
var decoded = sqids.Decode(ids); // [1, 2, 3]
Почему стоит попробовать Sqids?
- Простота: Всего один NuGet-пакет и пара строк кода
- Гибкость: Настройка алфавита, длины и списка запрещённых слов
- Надёжность: 100% покрытие тестами
- Скорость: Оптимизированная работа даже с большими числами
Если вы разрабатываете API, веб-приложение или любую систему, где важны красивые и безопасные идентификаторы, Sqids станет отличным решением. Попробуйте — и ваши URL больше никогда не будут прежними!
dotnet add package Sqids
