TypeID-JS: Taip Safe, K-Sortable Unique ID untuk Javascript

WBOY
Lepaskan: 2024-07-16 21:31:00
asal
669 orang telah melayarinya

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

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.

Jenis Keselamatan dan Pengecam Unik

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 };
};
Salin selepas log masuk

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: K-sorable, type-safe, pengecam unik di peringkat global

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:

  1. Awalan yang mewakili jenis ID (63 aksara, huruf ASCII huruf kecil)
  2. Pemisah garis bawah (_)
  3. UUIDv7 128-bit dikodkan sebagai rentetan 26 aksara menggunakan pengekodan base32 yang diubah suai.
  user_2x4y6z8a0b1c2d3e4f5g6h7j8k
  └──┘ └────────────────────────┘
  type    uuid suffix (base32)
Salin selepas log masuk

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'>,
) => {
    ...
}
Salin selepas log masuk

Selain keselamatan jenis, format ini mempunyai beberapa sifat yang menjadikannya mesra untuk digunakan oleh pembangun:

  1. UUIDv7 serasi: Anda boleh menukar TypeID kepada UUID dengan mudah dengan mengalih keluar awalan dan menyahkod akhiran.
  2. K-sortable: Anda boleh menggunakan TypeID sebagai kunci utama boleh diisih dalam pangkalan data anda dengan lokasi yang baik.
  3. URL selamat: Kami menggunakan TypeIDs dalam URL kami untuk memudahkannya untuk menyalin, menampal dan berkongsi. Memasukkan TypeIDs dalam URL memudahkan penjanaan keadaan halaman.
  4. Mudah dipilih: Anda boleh menyalin dan menampalnya dengan mengklik dua kali (Cubalah!)

Ciri Baharu dalam TypeID-JS v1.0

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:

  1. TipeID yang tidak berkotak, berasaskan fungsi, boleh distrim: Ini memungkinkan untuk menyiri TypeID tanpa menghantarnya ke rentetan dan membolehkan anda menggunakan TypeID sebagai kunci dalam Peta dan Set.
  2. Semakan Jenis dan Masa Jalan yang Lebih Ketat: TypeID kini menimbulkan ralat jika anda cuba menghuraikan rentetan kosong atau id taip dengan awalan yang salah.
  3. Keserasian dengan spesifikasi TypeID v3: JS TypeIDs kini boleh menggunakan garis bawah dalam awalan. Contohnya: pro_subscription_2x4y6z8a0b1c2d3e4f5g6h7j8k ialah TypeID yang sah dengan awalan pro_subscription.

Cara Menggunakan TypeID dengan projek anda

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.

Ingin Meningkatkan Pasukan Pembangunan anda?

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!