Depuis que nous avons annoncé TypeID pour la première fois l'année dernière, nous avons constaté une adoption et un intérêt significatifs de la part de la communauté, avec 23 clients linguistiques différents fournis par la communauté et 90 000 téléchargements NPM hebdomadaires de notre implémentation Typescript. .
La semaine dernière, nous avons publié la version 1.0 de notre implémentation Typescript, TypeID-JS. Pour célébrer cette version, nous souhaitions expliquer davantage pourquoi nous avons écrit TypeID et comment nous l'utilisons pour garantir la sécurité des types chez Jetify.
Nous avons développé l'idée de TypeID lors de la création de Jetify Cloud, notre solution de déploiement et de gestion de projets basés sur Devbox ou Docker au sein de votre équipe. L'architecture de Jetify Cloud comporte de nombreuses entités différentes que nous devons gérer : organisations, utilisateurs, déploiements, secrets et projets, qui nécessitent tous des identifiants uniques pour les distinguer.
À l'origine, nous avons commencé par suivre les meilleures pratiques et attribuer un UUID à chaque instance d'une entité. Pourtant, nous avons rapidement rencontré un problème : UUIDv7 manque de sécurité de type ! Prenons le code ci-dessous comme exemple :
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 }; };
Cette fonction utilise deux UUID pour rechercher un membre et une organisation. Cependant, la fonction ne peut pas garantir que memberID et orgID représentent la bonne entité ! Si un développeur utilise accidentellement un identifiant de membre alors que nous attendions un identifiant d'organisation, nous ne découvririons le problème qu'au moment de l'exécution.
Alors que nous recherchions des solutions à ce problème, nous avons rencontré l'ID d'objet de Stripe, qui encode les informations de type en identifiants à l'aide d'un préfixe. Cela semblait être une excellente solution, mais malheureusement, nous n'avons pas pu trouver de norme bien définie pour implémenter de manière cohérente les identifiants saisis dans plusieurs langues.
TypeID est notre tentative de créer une norme aussi cohérente. TypeID est un identifiant unique au monde, triable en K et de type sécurisé, inspiré des types préfixés de Stripe. TypeID fournit également une norme cohérente permettant à d'autres langages d'implémenter leurs clients et bibliothèques.
Les TypeID codent les identifiants uniques sous la forme d'une chaîne minuscule composée de trois parties :
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
Avec ce format, un client compatible TypeID peut encoder et décoder les informations de type dans vos identifiants, puis exécuter des vérifications au moment de la construction ou de la compilation pour garantir que vous utilisez le bon identifiant. Par exemple, si nous voulions créer un TypeID aléatoire pour une entité utilisateur, nous pourrions faire quelque chose comme ceci :
Avec TypeID, nous pouvons également ajouter des vérifications de type à nos fonctions et détecter les erreurs au moment de l'exécution. En réécrivant l'exemple ci-dessus, nous pouvons désormais être sûrs que les développeurs utiliseront les bons identifiants au bon endroit :
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID, orgId: TypeID, ) => { ... }
En plus de la sécurité des types, ce format possède quelques propriétés qui le rendent convivial pour les développeurs :
Aujourd'hui, nous annonçons la version 1.0 de notre bibliothèque TypeID-JS. Cette mise à jour ajoute plusieurs nouvelles fonctionnalités pour améliorer la convivialité et la sécurité des types, notamment :
Vous pouvez ajouter TypeID à votre projet JS à l'aide du gestionnaire de packages NodeJS de votre choix. Vous n'utilisez pas JS ? TypeID a 26 implémentations différentes, allant de Go to OCaml à SQL. Si vous souhaitez écrire votre propre implémentation de TypeID, vous pouvez consulter notre spécification formelle.
Notre équipe chez Jetify crée de puissants outils de développement. Simplifiez vos déploiements et projets avec Jetify Cloud, ou automatisez l'intégration des environnements de développement avec Devbox. Vous pouvez nous suivre sur Twitter ou discuter avec nos développeurs en direct sur notre serveur Discord. Nous acceptons également les problèmes et les demandes d'extraction sur notre dépôt Github.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3