"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > TypeID-JS: Escriba ID únicos seguros y clasificables en K para Javascript

TypeID-JS: Escriba ID únicos seguros y clasificables en K para Javascript

Publicado el 2024-08-05
Navegar:929

TypeID-JS: Type Safe, K-Sortable Unique IDs for Javascript

Desde que anunciamos TypeID por primera vez el año pasado, hemos visto una adopción e interés significativos por parte de la comunidad, con 23 clientes en diferentes idiomas contribuidos por la comunidad y 90,000 descargas semanales de NPM de nuestra implementación de Typescript. .

La semana pasada, lanzamos la versión 1.0 de nuestra implementación de Typecript, TypeID-JS. Para celebrar este lanzamiento, queríamos compartir más sobre por qué escribimos TypeID y cómo lo usamos para garantizar la seguridad tipográfica en Jetify.

Tipo de seguridad e identificadores únicos

Desarrollamos la idea de TypeID mientras construíamos Jetify Cloud, nuestra solución para implementar y administrar proyectos basados ​​en Devbox o Docker en todo su equipo. La arquitectura de Jetify Cloud tiene muchas entidades diferentes que debemos administrar: organizaciones, usuarios, implementaciones, secretos y proyectos, todos los cuales requieren identificadores únicos para distinguirlos.

Originalmente, comenzamos siguiendo las mejores prácticas y asignando un UUID a cada instancia de una entidad. Aún así, rápidamente nos encontramos con un problema: ¡UUIDv7 carece de seguridad de tipos! Tome el siguiente código como ejemplo:

export const getMember = async (
  memberId: UUID,
  orgId: UUID,
) => {
  const { member, organization } =
    await authClient.organizations.members.get({
      organization_id: orgId,
      member_id: memberId,
    });

  return { member, organization };
};

Esta función utiliza dos UUID para buscar un miembro y una organización. Sin embargo, la función no puede garantizar que el ID de miembro y el ID de organización representen la entidad correcta. Si un desarrollador utiliza accidentalmente un ID de miembro donde esperábamos un ID de organización, solo descubriríamos el problema en tiempo de ejecución.

Mientras buscábamos soluciones a este problema, encontramos el Object ID de Stripe, que codifica información de tipo en ID usando un prefijo. Parecía una gran solución, pero desafortunadamente no pudimos encontrar un estándar bien definido para implementar de manera consistente identificaciones escritas en varios idiomas.

TypeID: identificadores únicos globalmente, con seguridad de tipos y ordenables K

TypeID es nuestro intento de crear un estándar tan consistente. TypeID es un identificador único a nivel mundial, con clasificación K y con seguridad de tipos, inspirado en los tipos con prefijo de Stripe. TypeID también proporciona un estándar consistente para que otros lenguajes implementen sus clientes y bibliotecas.

Los TypeID codifican identificadores únicos como una cadena en minúsculas con tres partes:

  1. Un prefijo que representa el tipo de ID (63 caracteres, letras ASCII minúsculas)
  2. Un separador de guión bajo (_)
  3. Un UUIDv7 de 128 bits codificado como una cadena de 26 caracteres utilizando una codificación base32 modificada.
  user_2x4y6z8a0b1c2d3e4f5g6h7j8k
  └──┘ └────────────────────────┘
  type    uuid suffix (base32)

Con este formato, un cliente compatible con TypeID puede codificar y decodificar información de tipo en sus ID y luego ejecutar comprobaciones en el momento de la compilación para asegurarse de que está utilizando la ID correcta. Por ejemplo, si quisiéramos crear un TypeID aleatorio para una entidad de usuario, podríamos hacer algo como esto:

Con TypeID, también podemos agregar comprobaciones de tipo a nuestras funciones y detectar errores en tiempo de ejecución. Al reescribir el ejemplo anterior, ahora podemos estar seguros de que los desarrolladores utilizarán los ID adecuados en el lugar correcto:

import { TypeID } from 'typeid-js';

export const getMember = async (
  memberId: TypeID,
  orgId: TypeID,
) => {
    ...
}

Además de la seguridad de tipos, este formato tiene algunas propiedades que lo hacen fácil de usar para los desarrolladores:

  1. Compatible con UUIDv7: Puede convertir fácilmente un TypeID en un UUID eliminando el prefijo y decodificando el sufijo.
  2. K-sortable: Puede utilizar un TypeID como clave principal ordenable en su base de datos con buena localidad.
  3. URL segura: Usamos TypeID en nuestras URL para que sean fáciles de copiar, pegar y compartir. Incluir TypeID en la URL simplifica la generación del estado de la página.
  4. Fácilmente seleccionable: Puedes copiarlo y pegarlo haciendo doble clic (¡Pruébalo!)

Nuevas funciones en TypeID-JS v1.0

Hoy anunciamos la versión 1.0 de nuestra biblioteca TypeID-JS. Esta actualización agrega varias características nuevas para mejorar la usabilidad y la seguridad de escritura, que incluyen:

  1. TypeIDs sin empaquetar, basados ​​en funciones y que se pueden transmitir: esto hace posible serializar TypeIDs sin convertirlos en cadenas y le permite usar TypeIDs como claves en mapas y conjuntos.
  2. Verificación más estricta de tipo y tiempo de ejecución: TypeID ahora arroja un error si intentas analizar una cadena vacía o un typeid con el prefijo incorrecto.
  3. Compatibilidad con la especificación TypeID v3: Los TypeID JS ahora pueden usar guiones bajos en el prefijo. Por ejemplo: pro_subscription_2x4y6z8a0b1c2d3e4f5g6h7j8k es un TypeID válido con el prefijo pro_subscription.

Cómo utilizar TypeID con su proyecto

Puede agregar TypeID a su proyecto JS utilizando el administrador de paquetes NodeJS de su elección. ¿No usas JS? TypeID tiene 26 implementaciones diferentes, desde Go a OCaml hasta SQL. Si está interesado en escribir su propia implementación de TypeID, puede consultar nuestra especificación formal.

¿Quiere potenciar su equipo de desarrollo?

Nuestro equipo en Jetify crea potentes herramientas para desarrolladores. Simplifique sus implementaciones y proyectos con Jetify Cloud o automatice la incorporación de entornos de desarrollo con Devbox. Puede seguirnos en Twitter o chatear con nuestros desarrolladores en vivo en nuestro servidor Discord. También damos la bienvenida a problemas y solicitudes de extracción en nuestro Github Repo.

Declaración de liberación Este artículo se reproduce en: https://dev.to/jetify/typeid-js-type-safe-k-sortable-unique-ids-for-javascript-djh?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3