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.
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 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:
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:
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:
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.
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.
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