Sqids – Generar IDs cortos y únicos a partir de números
Sqids, un sucesor rebautizado de Hashids, pretende convertir enteros en IDs alfanuméricos cortos al estilo YouTube, con funciones como alfabetos personalizados y filtrado de groserías. Los comentaristas comparan sus ventajas con enfoques más simples como base62/base64, UUID/ULID o esquemas personalizados basados en Feistel, y cuestionan si una dependencia adicional está justificada para lo que esencialmente es una codificación reversible y no criptográfica. Una preocupación recurrente es la lista de bloqueo evolutiva para las «malas palabras», que puede cambiar cómo se codifican los IDs con el tiempo y arriesga incoherencias entre idiomas y versiones.
Cobertura de idiomas y modelo de comunidad
- El sitio enumera muchos idiomas; solo algunos están implementados, y otros son repositorios «esqueleto» para medir el interés e invitar a contribuir.
- Algunos ven esto como una forma ingeniosa de construir comunidad y una buena tarea de entrada en FOSS; a otros les resulta confuso al principio, pero señalan que las señales visuales distinguen los idiomas implementados de los de marcador de posición.
- Se especula que el seguimiento de clics en las insignias de idioma sirve para priorizar los puertos.
Relación con Hashids y otros esquemas de ID
- Sqids es, esencialmente, el sucesor/cambio de marca de Hashids, con objetivos similares: codificaciones cortas y aptas para URLs de enteros.
- Se compara con base64/base58/base36, nanoid, UUID/ULID, Crockford base32 y varios esquemas personalizados; muchos sostienen que esos son más simples y a menudo «suficientemente buenos».
- Algunos prefieren el cifrado que preserva el formato o permutaciones basadas en Feistel en lugar de Sqids para ocultar IDs secuenciales.
Filtrado de groserías y listas de bloqueo
- Las listas de bloqueo integradas generan un gran debate.
- Preocupaciones: las listas son específicas de cada idioma, incompletas y difíciles de mantener; cambiar los valores predeterminados puede cambiar las codificaciones con el tiempo.
- La biblioteca recomienda proporcionar una lista de bloqueo personalizada para mantener estables las salidas; los críticos dicen que este diseño es frágil y que la compatibilidad entre idiomas puede divergir.
- Propuestas alternativas: elegir alfabetos que hagan imposible o improbable la profanidad (por ejemplo, omitir vocales y caracteres ambiguos) en lugar de filtrar cadenas generadas.
Unicidad, estabilidad y diseño del algoritmo
- El hilo examina cómo Sqids garantiza una asignación sin colisiones desde arrays de enteros a cadenas, incluyendo cómo reintenta con palabras malas sin romper la inyectividad.
- Matiz importante: la decodificación es estable, pero la codificación de los mismos números puede cambiar si cambian las listas de bloqueo o la configuración; no hay garantía de un único ID canónico salvo que se imponga uno.
Seguridad, ofuscación e IDs de usuario
- La biblioteca dice explícitamente que no sirve para seguridad ni para ocultar datos; la salida es reversible con el alfabeto.
- Aun así, algunas personas lo presentan como una forma de ocultar IDs secuenciales o recuentos de usuarios, algo que otros llaman engañoso o «seguridad por oscuridad».
- Para ocultar métricas de negocio o impedir la enumeración de IDs, los comentaristas recomiendan UUIDs aleatorios, IDs cifrados, redes Feistel u otros enfoques criptográficos.
Casos de uso, practicidad y alternativas
- Quienes lo apoyan valoran Sqids por sus URLs visualmente más cortas, al estilo «YouTube», y por su interoperabilidad entre lenguajes.
- Los escépticos señalan que, para muchas aplicaciones, las codificaciones base-N simples, los slugs o los UUID son más fáciles, ya están disponibles y evitan la complejidad de las listas de bloqueo.
- Algunos cuestionan la necesidad de una biblioteca dedicada, dado que muchos casos de uso son «unas pocas líneas de código», aunque otros sostienen que la estandarización y la portabilidad la justifican.