26 puntos por GN⁺ 2023-11-26 | 6 comentarios | Compartir por WhatsApp
  • Sqids es una biblioteca de código abierto que genera IDs estilo YouTube a partir de números
  • Los IDs generados son cortos, pueden crearse con un alfabeto personalizado y se garantiza que no haya colisiones
  • Un ejemplo de los IDs proporcionados tiene una forma como https://example.com/Lqj8a0

Por qué usar Sqids

  • El objetivo principal de Sqids está en el efecto visual
  • Si quieres usar IDs en lugar de números en una web app, Sqids puede ser una buena opción
  • Entre sus casos de uso están el acortamiento de enlaces, el uso seguro en URL, IDs de eventos, codificación/decodificación sin colisiones y contraseñas de un solo uso
  • No es adecuado para datos sensibles y, si se usa como ID de usuario, puede exponer la cantidad de usuarios

Características de Sqids

  • Puede generar IDs cortos a partir de números no negativos
  • Es fácil de codificar y decodificar
  • Los IDs generados automáticamente no incluyen groserías comunes
  • Admite mezclar el alfabeto para crear IDs personalizados
  • Soporta 40 lenguajes de programación, de los cuales 15 usan el nuevo diseño
  • Genera los mismos IDs en todas las versiones
  • Tiene un tamaño de biblioteca pequeño y una licencia permisiva

Opinión de GN⁺

  • La biblioteca Sqids es útil para desarrolladores que quieren usar IDs cortos y sin colisiones en lugar de números dentro de una web app
  • Esta biblioteca ofrece IDs visualmente atractivos y, al soportar varios lenguajes de programación, tiene buena accesibilidad
  • Ofrece una oportunidad favorable para desarrolladores de código abierto y protege los derechos de autor con la licencia MIT

6 comentarios

 
haebom 2023-11-27

Está bueno para dificultar el scraping.

 
stardust33 2023-11-30

¿Podrían explicar un poco más cómo usarlo para evitar el scraping?

 
ragus 2023-12-02

Si la URL es simplemente posts/1, posts/2, posts/3, los rastreadores prueban poniendo 1,2,3,4,5... y recorren así el sitio.
Si la URL tiene un formato como posts/L12Qsd o posts/dei24A, parece que no pueden hacerlo por eso.

 
stardust33 2023-12-05

¡Ah! Gracias por la respuesta.

 
jaypark 2023-11-27

Tenía curiosidad por saber cuál es la diferencia con hashids, así que busqué y, si entras a https://hashids.org, te redirige a https://sqids.org/. Parece que le cambiaron el nombre.

https://sqids.org/faq#hashids

 
GN⁺ 2023-11-26
Opiniones de Hacker News
  • Posibilidad de obtener insights de negocio de empresas que usan IDs secuenciales

    • Por ejemplo, se puede estimar la tasa de crecimiento de una empresa a partir del ID asignado al registrarse
    • Esto puede aplicarse a todos los tipos de recursos dentro de una aplicación
    • Se cuestiona qué tan importante es hoy en día el "valor basura" en la barra de URL
    • Como la mayoría de los navegadores ocultan gran parte de la URL, usan uulids mientras esperan la adopción más extendida de UUID v7
    • El componente de tiempo integrado a veces es útil (por ejemplo, para reglas de fusión de objetos)
  • Dudas sobre la mención de códigos de un solo uso

    • Los códigos deben ser impredecibles, pero no necesariamente únicos
    • Funciona si se proporciona una fuente aleatoria adecuada, pero la característica de estar "relleno de valores basura" parece más compleja de lo que realmente es
    • Entre 4 y 8 dígitos aleatorios funcionan bien y dejan claro el nivel de seguridad
    • Los números son más fáciles de entender que letras latinas con distinción entre mayúsculas y minúsculas, especialmente para usuarios de idiomas que usan otros sistemas de escritura
  • Decepción por no poder formatear enteros de 128 bits o arreglos de bytes

    • Eso permitiría dar formato a UUID
    • Hay poca preferencia por usar IDs enteros públicos
    • Los IDs ascendentes pueden filtrar información importante
    • Se prefiere formatear UUID como Base64URL para hacerlos más cortos en URLs, códigos QR, etc.
  • En aplicaciones Ruby se usa un método de conversión a bases altas

    • Sqid ofrece una librería para Ruby y permite configurar una base mucho más alta, incluyendo letras mayúsculas y emojis
    • Harían falta números mucho más grandes antes de que el ahorro de espacio marque una gran diferencia
    • Es difícil saber si vale la pena agregar una nueva dependencia
  • El filtrado de groserías puede convertirse en una responsabilidad por diseño

    • La lista de palabras prohibidas debe mantenerse inmutable para preservar la codificación
    • De lo contrario, sqids anteriores podrían decodificarse de forma incorrecta
  • Preferencia por usar nanoid y un diccionario de caracteres seguros

    • Se propone usar un enfoque de diccionario similar en lugar de una implementación codificada para buscar palabras "malas"
    • Se expresa interés por la suite de pruebas de rendimiento
    • Como la generación de UUID v4 está optimizada en la mayoría de los lenguajes, se duda que una solución personalizada sea realmente mejor
  • Discusión sobre el uso de cadenas generadas aleatoriamente

    • Se usan para IDs, tokens de recuperación de contraseña, etc.
    • Se han generado millones y decenas de miles de personas los verifican cada día
    • No ha habido quejas por IDs de contenido aleatorio
    • La sociedad moderna parece tener demasiado miedo de ofender a alguien, al punto de extender el filtro de groserías incluso a IDs de base de datos y tokens de recuperación de contraseña
    • Si la longitud mínima se establece en 8, es poco probable que aparezca una grosería completa como ID entero
  • Confusión por los enlaces a 40 lenguajes en la sección "Get Started"

    • Solo 15 de esos 40 lenguajes permiten empezar realmente; los otros 25 son repositorios esqueleto que piden a la gente marcar el repositorio para mostrar interés
  • Pregunta sobre cómo ajustar o evolucionar la blocklist

    • Si un ID está en la blocklist, simplemente se incrementa
    • Los IDs quedan fijados al contenido de la blocklist, y ajustarla invalida ciertos segmentos de IDs generados anteriormente
  • En este hilo, mucha gente menciona que es una buena forma de ocultar insights en IDs/números

    • Como los valores generados se pueden decodificar fácilmente, se plantea la duda de si bastaría con decodificar algunos números para obtener esos insights también