Sejak kami mula-mula mengumumkan TypeID tahun lepas, kami telah melihat penerimaan dan minat yang ketara daripada komuniti, dengan 23 pelanggan bahasa berbeza disumbangkan oleh komuniti dan 90,000 muat turun NPM mingguan bagi Pelaksanaan Typescript kami .
Minggu lepas, kami mengeluarkan versi 1.0 pelaksanaan TypeScript kami, TypeID-JS. Untuk meraikan keluaran ini, kami ingin berkongsi lebih lanjut tentang sebab kami menulis TypeID dan cara kami menggunakannya untuk memastikan keselamatan jenis di Jetify.
Kami membangunkan idea untuk TypeID semasa membina Jetify Cloud, penyelesaian kami untuk mengatur dan mengurus projek berasaskan Devbox atau Docker merentas pasukan anda. Seni bina Jetify Cloud mempunyai banyak entiti berbeza yang perlu kami uruskan: Org, Pengguna, Deployment, Rahsia dan Projek, yang kesemuanya memerlukan pengecam unik untuk membezakannya.
Pada asalnya, kami bermula dengan mengikuti amalan terbaik dan memberikan UUID kepada setiap tika entiti. Namun, kami dengan cepat menghadapi masalah: UUIDv7 tidak mempunyai keselamatan jenis! Ambil kod di bawah sebagai contoh:
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 }; };
Fungsi ini menggunakan dua UUID untuk mencari ahli dan organisasi. Walau bagaimanapun, fungsi tidak dapat memastikan bahawa memberID dan orgID mewakili entiti yang betul! Jika pembangun menggunakan ID ahli secara tidak sengaja di mana kami menjangkakan orgID, kami hanya akan menemui isu itu semasa masa jalan.
Ketika kami sedang mencari penyelesaian kepada masalah ini, kami menemui ID Objek Stripe, yang mengekodkan maklumat jenis ke dalam ID menggunakan awalan. Ini kelihatan seperti penyelesaian yang hebat, tetapi malangnya, kami tidak menemui standard yang jelas untuk melaksanakan ID yang ditaip secara konsisten merentas berbilang bahasa.
TypeID ialah percubaan kami untuk mencipta standard yang konsisten. TypeID ialah pengecam unik yang selamat jenis, K-sortable, global yang diinspirasikan oleh jenis awalan Stripe. TypeID juga menyediakan standard yang konsisten untuk bahasa lain untuk melaksanakan pelanggan dan perpustakaan mereka.
ID Jenis mengekod pengecam unik sebagai rentetan huruf kecil dengan tiga bahagian:
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
Dengan format ini, klien yang serasi TypeID boleh mengekod dan menyahkod maklumat jenis ke dalam ID anda dan kemudian menjalankan semakan pada masa binaan atau penyusunan untuk memastikan anda menggunakan ID yang betul. Sebagai contoh, jika kami ingin mencipta TypeID rawak untuk entiti pengguna, kami boleh melakukan sesuatu seperti ini:
Dengan TypeID, kami juga boleh menambah semakan jenis pada fungsi kami dan menangkap ralat semasa masa jalan. Menulis semula contoh di atas, kini kami boleh memastikan bahawa pembangun akan menggunakan ID yang betul di tempat yang betul:
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID<'member'>, orgId: TypeID<'org'>, ) => { ... }
Selain keselamatan jenis, format ini mempunyai beberapa sifat yang menjadikannya mesra untuk digunakan oleh pembangun:
Hari ini, kami mengumumkan versi 1.0 perpustakaan TypeID-JS kami. Kemas kini ini menambah beberapa ciri baharu untuk meningkatkan kebolehgunaan dan keselamatan jenis, termasuk:
Anda boleh menambah TypeID pada projek JS anda menggunakan pengurus pakej NodeJS pilihan anda. Tidak menggunakan JS? TypeID mempunyai 26 pelaksanaan yang berbeza, daripada Pergi ke OCaml ke SQL. Jika anda berminat untuk menulis pelaksanaan TypeID anda sendiri, anda boleh menyemak spesifikasi rasmi kami.
Pasukan kami di Jetify membina alat pembangun yang berkuasa. Permudahkan penempatan dan projek anda dengan Jetify Cloud, atau automasi onboarding + persekitaran dev dengan Devbox. Anda boleh mengikuti kami di Twitter, atau berbual dengan pembangun kami secara langsung di Pelayan Discord kami. Kami juga mengalu-alukan isu dan permintaan tarik pada Repo Github kami.
Atas ialah kandungan terperinci TypeID-JS: Taip Safe, K-Sortable Unique ID untuk Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!