Bahasa Melayu

Alat pembangun · UUID penjana

UUID Nil dan Maks: Dua Nilai Istimewa dan Bila Menggunakannya

· Latar belakang

uuid aliran kerja pembangun pengesahan data

Baris pangkalan data menunjuk kepada pengecualian UUID eksplisit semua-sifar manakala nilai semua-f dihentikan pada sempadan pengesahan
Ilustrasi vektor ToolAcre asal

Sifar sifar UUID telah berada dalam standard sejak 2005 dan All-F Max UUID menyertai 2024. Siaran ini menerangkan tujuannya, cara mereka berinteraksi dengan pengesah dan kesilapan nilai sentinel yang perlu dielakkan.

Baris dengan ID 00000000-0000-0000-0000-000000000000 — cara pemegang tempat menjadi pepijat pengeluaran

Baris yang pengecamnya ialah 00000000-0000-0000-0000-000000000000 boleh kelihatan berbentuk UUID sambil membawa maksud yang berbeza daripada pengecam yang dijana. Jika aplikasi secara senyap-senyap menggunakan nilai itu untuk "belum diberikan lagi", setiap baris yang belum selesai berkongsi penanda yang sama. Kod yang menganggap mana-mana UUID nama yang diterima sebagai objek sebenar kemudiannya boleh meminta, menyimpan cache atau bergabung pada pemegang tempat seolah-olah ia adalah kunci biasa. Format yang boleh dilihat tidak menyampaikan peraturan perniagaan; sahaja kontrak sentinel yang jelas.

Pepijat pengeluaran bermula apabila satu lapisan mengetahui tentang pemegang tempat dan satu lagi tidak. Borang boleh menyerahkan Nil, API boleh menerimanya dan lapisan kegigihan boleh menyimpannya, manakala pekerja hiliran menganggap setiap rentetan bukan nol sebagai kunci asing yang boleh digunakan. Kegagalannya bukanlah kerana Nil cacat. ToolAcre sengaja mengenalinya. Kegagalan itu membenarkan "teks yang sah," "pengecam yang dijana" dan "hubungan yang ditetapkan" runtuh menjadi satu keadaan yang tidak ditandai.

Nil UUID — takrifnya, dan sebab setiap versi serta semakan varian gagal secara teknikal padanya

Dalam pelaksanaan yang diperiksa, Nil ialah rentetan sifar semua kanonik. Ia menerima cawangan khusus sebelum biasa UUID corak diuji, jadi isValidUuid mengembalikan benar walaupun ungkapan biasa memerlukan digit versi daripada 1 melalui 8 dan an RFC-variant nibble daripada 8 melalui b. inspectUuid mengikuti pengecualian yang sama: ia melaporkan nilai yang sah, memberikan versi 0, dan mengatakan bahawa UUID semuanya adalah sifar bit dan bukan rawak. Ini adalah tingkah laku aplikasi yang disahkan, bukan tuntutan umum bahawa setiap pengesah mesti membuat pilihan yang sama.

Cawangan itu penting kerana Nil tidak melepasi laluan versi-dan-varian biasa yang digunakan untuk pengecam yang dijana. Nilai ToolAcre-4 membawa 4 dalam kedudukan versi dan satu daripada 8, 9, a atau b dalam kedudukan varian; Tiada membawa sifar di kedua-dua tempat. Memanggil cek tersebut "gagal" tanpa menyebut pengecualian akan mengelirukan. Pemeriksa terlebih dahulu mengenali nilai istimewa, kemudian memintas corak biasa mengikut reka bentuk. Pengguna memerlukan pesanan yang sama kelihatan jika mereka menerimanya.

Nil UUID ialah pengecualian sah yang jelas dalam ToolAcre, dilaporkan sebagai versi 0

Rentetan all-f ffffffff-ffff-ffff-ffff-ffffffffffff tidak menerima cawangan khas dalam repositori ini. Ia juga gagal dalam corak biasa kerana f berada di luar julat versi yang diterima dan di luar set camilan varian RFC yang diterima. Akibatnya, ToolAcre melaporkannya sebagai bukan kanonik dan bukannya menganggapnya seperti Tiada. Buku kerja mengaitkan sejarah penyeragaman dan tujuan sempadan julat kepada Maks, tetapi rekod alat, pelaksanaan atau ujian tidak mengesahkan tuntutan tersebut, jadi artikel ini tidak mengulanginya.

Perbezaan ini lebih berguna daripada sejarah yang tidak disokong: Nil ialah pemalar bernama dengan gelagat yang diuji, manakala Max ialah input yang ditolak oleh penyemak. Projek mungkin mentakrifkan semantik sentinel tambahan dalam protokolnya sendiri, tetapi pilihan itu tidak boleh disimpulkan daripada ToolAcre. Jika kesalingoperasian bergantung pada penerimaan nilai all-f, dokumen peraturan itu dan ujinya dalam sistem pemilikan. Jangan menganggap setiap perpustakaan akan mengklasifikasikan rentetan berbentuk UUID secara identik.

Nilai all-f Max ditolak oleh ToolAcre; tiada sejarah RFC atau penggunaan julat yang dimaksudkan ditegaskan

Sentinel dan nilai nol menjawab soalan yang berbeza sahaja apabila skema menyatakan demikian. Null boleh mewakili ketiadaan hubungan secara langsung. Sentinel memastikan lajur diisi dan mungkin berguna apabila antara muka di sekeliling tidak boleh membawa nol, tetapi ia mencipta nilai yang kelihatan seperti data dan oleh itu bergerak melalui indeks, gabungan, penyeri bersiri dan cache. Kemudahan yang jelas memindahkan tanggungjawab kepada setiap pembaca: setiap pembaca mesti ingat bahawa seseorang yang diterima UUID tidak menamakan entiti yang ditetapkan.

Perdagangan itu menjadi perangkap apabila penjaga boleh memenuhi pemeriksaan bentuk kunci asing tanpa memenuhi maksud perhubungan. Ia juga boleh mengaburkan keadaan yang berbeza seperti tidak diketahui, sengaja tidak ditetapkan, dipadamkan atau belum diproses. Jika keadaan tersebut mempengaruhi tingkah laku, nyatakan keadaan tersebut secara eksplisit dan bukannya membebankan satu pengecam ajaib. Apabila Nil dikekalkan untuk keserasian, berikan keadaan satu makna yang didokumenkan, tolaknya di tempat lain dan tukarkannya pada sempadan yang dimiliki dengan jelas dan bukannya menyelerakan perbandingan di seluruh kod perniagaan.

Pengesah dan nilai istimewa — mengapa semakan versi/variant yang ketat boleh menolak Nil dan Maks, dan cara memutuskan sama ada semakan anda harus

ToolAcre menunjukkan dua lapisan dalam satu pengesah. Input biasa dipangkas, pendakap luar pilihan dialihkan dan rentetan yang selebihnya ditandakan pada reka letak 8-4-4-4-12 berkanun ditambah dengan versi yang diterima dan kedudukan varian. Tiada diuji sebelum corak itu dan diterima dengan sengaja. Max tidak terkecuali dan gagal. Ini bermakna pemanggil tidak boleh meramalkan dasar nilai khas daripada ungkapan biasa sahaja; aliran kawalan yang mengelilingi corak adalah sebahagian daripada kontrak pengesahan.

Reka dasar anda sendiri dengan memisahkan tiga soalan. Pertama, adakah teks itu boleh dikenali dalam bentuk yang dibenarkan sempadan anda? Kedua, adakah nilai itu UUID biasa atau pengecualian yang dinamakan? Ketiga, adakah kategori itu dibenarkan untuk medan dan operasi ini? Titik akhir penciptaan mungkin menolak Nil walaupun penghurai diagnostik mengenalinya, manakala sempadan import mungkin menterjemahkan penanda Nil warisan yang didokumenkan kepada nol. Mengembalikan hasil tersebut secara berasingan menghalang "penghuraikan menerimanya" daripada menjadi kebenaran tidak sengaja untuk menyimpannya.

ToolAcre menerima Nil secara eksplisit dan menolak Max di bawah corak versi dan variannya

Pertimbangkan jadual tugas dengan pengecam penerima yang menggunakan Nil untuk "tidak ditugaskan". Pertanyaan yang ditulis sebagai WHERE assignee_id IS NOT NULL kelihatan untuk memilih tugas yang diberikan, tetapi ia juga memilih setiap baris Tiada kerana sentinel ialah rentetan konkrit. Gabungan kemudian boleh menjatuhkan baris tersebut jika tiada pengguna yang mempunyai kunci itu, menghasilkan hasil kedua yang kurang jelas. Kedua-dua pertanyaan adalah munasabah secara tempatan; mereka tidak bersetuju kerana skema menyembunyikan keadaan di dalam pengecam yang kelihatan biasa dan bukannya mendedahkan tugasan secara langsung.

Pembetulan tahan lama adalah untuk memodelkan tugasan sebagai tugasan: gunakan perhubungan boleh batal apabila kontrak storan membenarkannya, atau tambahkan status eksplisit apabila beberapa keadaan mesti dibezakan. Jika sempadan keserasian masih menghantar Nil, terjemahkannya sekali sebelum kegigihan dan terbalikkan pemetaan sahaja untuk sempadan itu. Kemudian uji nilai versi-4 yang dijana, Tiada, Maks, input kosong dan teks cacat sebagai kes berasingan. Aplikasi harus memutuskan setiap keputusan dan bukannya mewarisi mana-mana jawapan semakan format generik berlaku untuk dikembalikan.

Bawa pulang: nilai istimewa memerlukan pengendalian yang jelas — hasilkan ID sebenar dengan penjana ToolAcre dan layan Nil dan Max sebagai pengecualian yang disengajakan

Nilai istimewa memerlukan pengendalian bernama kerana bentuknya tidak boleh membawa maksud aplikasi anda. ToolAcre menjana versi biasa-4 UUID daripada Web Crypto, berundur dari rawakUUID untuk mendapatkanRandomValues ​​apabila perlu dan enggan menggunakan sumber rawak yang tidak selamat. Pemeriksanya kemudiannya boleh membezakan nilai yang dijana daripada pengecualian Nil yang diiktiraf secara eksplisit. Itu menjadikan alat itu berguna untuk pemerhatian, tetapi ia tidak memilih dasar sentinel pangkalan data atau membuktikan bahawa pengecam yang diterima tergolong dalam rekod sedia ada.

Gunakan penjana untuk pengecam baharu dan layan setiap sentinel sebagai keputusan protokol yang berasingan. Dalam penyemak semasa, Nil adalah sah, versi 0, dan bukan rawak; Max ditolak. Kekalkan perbezaan itu semasa menguji halaman, kemudian bandingkan dengan peraturan bahasa, pangkalan data dan API anda sebelum menerima mana-mana nilai. Bawa pulang yang selamat adalah sengaja sempit: ID yang dijana, pengecualian penghurai, perhubungan yang hilang dan keadaan perniagaan adalah konsep yang berbeza dan sempadan yang teguh mengekalkannya berbeza.