Desde que anunciamos o TypeID pela primeira vez no ano passado, vimos uma adoção e interesse significativos da comunidade, com 23 clientes de idiomas diferentes contribuídos pela comunidade e 90.000 downloads NPM semanais de nossa implementação Typescript .
Na semana passada, lançamos a versão 1.0 de nossa implementação Typescript, TypeID-JS. Para comemorar este lançamento, gostaríamos de compartilhar mais sobre por que escrevemos TypeID e como o usamos para garantir a segurança de tipo no Jetify.
Desenvolvemos a ideia do TypeID enquanto construímos o Jetify Cloud, nossa solução para implantar e gerenciar projetos baseados em Devbox ou Docker em sua equipe. A arquitetura do Jetify Cloud tem muitas entidades diferentes que precisamos gerenciar: organizações, usuários, implantações, segredos e projetos, todos os quais exigem identificadores exclusivos para distingui-los.
Originalmente, começamos seguindo as práticas recomendadas e atribuindo um UUID a cada instância de uma entidade. Ainda assim, rapidamente encontramos um problema: falta segurança de tipo ao UUIDv7! Tome o código abaixo como exemplo:
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 função usa dois UUIDs para procurar um membro e uma organização. No entanto, a função não pode garantir que memberID e orgID representem a entidade correta! Se um desenvolvedor usar acidentalmente um memberID onde esperávamos um orgID, só descobriríamos o problema em tempo de execução.
Enquanto procurávamos soluções para esse problema, encontramos o Object ID do Stripe, que codifica informações de tipo em IDs usando um prefixo. Parecia uma ótima solução, mas, infelizmente, não conseguimos encontrar um padrão bem definido para implementar consistentemente IDs digitados em vários idiomas.
TypeID é nossa tentativa de criar um padrão tão consistente. TypeID é um identificador globalmente exclusivo, com segurança de tipo, classificável por K, inspirado nos tipos prefixados do Stripe. TypeID também fornece um padrão consistente para outras linguagens implementarem seus clientes e bibliotecas.
TypeIDs codificam identificadores exclusivos como uma string minúscula com três partes:
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
Com esse formato, um cliente compatível com TypeID pode codificar e decodificar informações de tipo em seus IDs e, em seguida, executar verificações em tempo de construção ou compilação para garantir que você está usando o ID correto. Por exemplo, se quiséssemos criar um TypeID aleatório para uma entidade de usuário, poderíamos fazer algo assim:
Com TypeID, também podemos adicionar verificações de tipo às nossas funções e detectar erros em tempo de execução. Reescrevendo o exemplo acima, agora podemos ter certeza de que os desenvolvedores usarão os IDs adequados no lugar certo:
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID, orgId: TypeID, ) => { ... }
Além da segurança de tipo, esse formato tem algumas propriedades que o tornam fácil de usar pelos desenvolvedores:
Hoje, estamos anunciando a versão 1.0 de nossa biblioteca TypeID-JS. Esta atualização adiciona vários novos recursos para melhorar a usabilidade e a segurança de digitação, incluindo:
Você pode adicionar TypeID ao seu projeto JS usando o gerenciador de pacotes NodeJS de sua preferência. Não está usando JS? TypeID tem 26 implementações diferentes, variando de Go para OCaml a SQL. Se você estiver interessado em escrever sua própria implementação de TypeID, você pode verificar nossa especificação formal.
Nossa equipe no Jetify cria ferramentas poderosas para desenvolvedores. Simplifique suas implantações e projetos com Jetify Cloud ou automatize a integração de ambientes de desenvolvimento com Devbox. Você pode nos seguir no Twitter ou conversar com nossos desenvolvedores ao vivo em nosso servidor Discord. Também aceitamos problemas e solicitações pull em nosso repositório Github.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3