हिन्दी

डेवलपर टूल · UUID जनरेटर

शून्य और अधिकतम UUID: दो विशेष मूल्य और उनका उपयोग कब करें

· पेजभूमि

uuid डेवलपर-वर्कफ़्लो आंकड़ा मान्यीकरण

एक डेटाबेस पंक्ति एक स्पष्ट सर्व-शून्य UUID अपवाद की ओर इशारा करती है जबकि एक ऑल-एफ मान एक सत्यापन सीमा पर रोक दिया जाता है
मूल ToolAcre वेक्टर चित्रण

ऑल-ज़ीरो निल UUID 2005 से मानक में है और ऑल-एफ मैक्स UUID 2024 में शामिल हो गया है। यह पोस्ट बताती है कि वे किस लिए हैं, वे सत्यापनकर्ताओं के साथ कैसे बातचीत करते हैं, और प्रहरी-मूल्य की गलतियों से बचना चाहिए।

ID वाली पंक्ति 00000000-0000-0000-0000-000000000000 - कैसे एक प्लेसहोल्डर एक उत्पादन बग बन जाता है

एक पंक्ति जिसका पहचानकर्ता 00000000-0000-0000-0000-000000000000 है, उत्पन्न पहचानकर्ता से भिन्न अर्थ रखते हुए UUID आकार का दिख सकता है। यदि कोई एप्लिकेशन चुपचाप उस मान का उपयोग "अभी तक असाइन नहीं किया गया" के लिए करता है, तो प्रत्येक अधूरी पंक्ति समान मार्कर साझा करती है। कोड जो किसी भी स्वीकृत UUID नाम को एक वास्तविक वस्तु मानता है, तब वह अनुरोध कर सकता है, कैश कर सकता है, या प्लेसहोल्डर पर शामिल हो सकता है जैसे कि यह एक सामान्य कुंजी थी। दृश्यमान प्रारूप व्यवसाय नियम को संप्रेषित नहीं करता है; केवल एक स्पष्ट प्रहरी अनुबंध ही ऐसा करता है।

उत्पादन बग तब शुरू होता है जब एक परत प्लेसहोल्डर के बारे में जानती है और दूसरी नहीं। एक फॉर्म शून्य सबमिट कर सकता है, एक API इसे स्वीकार कर सकता है, और एक दृढ़ता परत इसे संग्रहीत कर सकती है, जबकि एक डाउनस्ट्रीम कार्यकर्ता प्रत्येक गैर-शून्य स्ट्रिंग को एक उपयोगी विदेशी कुंजी के रूप में मानता है। विफलता यह नहीं है कि निल विकृत है। ToolAcre जानबूझकर इसे पहचानता है। विफलता "मान्य पाठ," "उत्पन्न पहचानकर्ता," और "असाइन किए गए संबंध" को एक अनियंत्रित स्थिति में ढहने की अनुमति दे रही है।

शून्य UUID - इसकी परिभाषा, और प्रत्येक संस्करण और संस्करण की जांच तकनीकी रूप से विफल क्यों होती है

जाँचे गए कार्यान्वयन में, शून्य विहित सर्व-शून्य स्ट्रिंग है। सामान्य UUID पैटर्न का परीक्षण करने से पहले इसे एक समर्पित शाखा प्राप्त होती है, इसलिए isValidUuid सत्य लौटाता है, भले ही नियमित अभिव्यक्ति के लिए 1 से 8 तक संस्करण अंक और 8 से b तक एक RFC-वैरिएंट निबल की आवश्यकता होती है। InspectUuid उसी अपवाद का अनुसरण करता है: यह एक वैध मान की रिपोर्ट करता है, संस्करण 0 निर्दिष्ट करता है, और कहता है कि UUID सभी शून्य बिट हैं और यादृच्छिक नहीं हैं। यह सत्यापित एप्लिकेशन व्यवहार है, यह कोई सामान्य दावा नहीं है कि प्रत्येक सत्यापनकर्ता को समान विकल्प चुनना होगा।

वह शाखा मायने रखती है क्योंकि शून्य उत्पन्न पहचानकर्ताओं के लिए उपयोग किए जाने वाले सामान्य संस्करण-और-संस्करण मार्ग को पारित नहीं करता है। एक ToolAcre संस्करण-4 मान संस्करण स्थिति में 4 रखता है और भिन्न स्थिति में 8, 9, a, या b में से एक रखता है; निल दोनों स्थानों पर शून्य रखता है। अपवाद का उल्लेख किए बिना उन चेकों को "विफल" कहना भ्रामक होगा। चेकर पहले विशेष मूल्य को पहचानता है, फिर डिज़ाइन द्वारा सामान्य पैटर्न को दरकिनार कर देता है। यदि उपभोक्ता इसे स्वीकार करते हैं तो उन्हें समान रूप से दृश्यमान ऑर्डर की आवश्यकता होती है।

शून्य UUID ToolAcre में एक स्पष्ट वैध अपवाद है, जिसे संस्करण 0 के रूप में रिपोर्ट किया गया है

ऑल-एफ स्ट्रिंग ffffffff-ffff-ffff-ffff-ffffffffff को इस रिपॉजिटरी में कोई विशेष शाखा नहीं मिलती है। यह सामान्य पैटर्न में भी विफल रहता है क्योंकि f स्वीकृत संस्करण सीमा के बाहर और स्वीकृत RFC-वेरिएंट निबल सेट के बाहर है। नतीजतन, ToolAcre इसे शून्य की तरह मानने के बजाय गैर-विहित के रूप में रिपोर्ट करता है। कार्यपुस्तिका मानकीकरण इतिहास और मैक्स के लिए एक सीमा-सीमा उद्देश्य का श्रेय देती है, लेकिन न तो टूल रिकॉर्ड, कार्यान्वयन, न ही परीक्षण उन दावों को सत्यापित करते हैं, इसलिए यह आलेख उन्हें दोहराता नहीं है।

यह अंतर असमर्थित इतिहास की तुलना में अधिक उपयोगी है: शून्य परीक्षण किए गए व्यवहार के साथ एक नामित स्थिरांक है, जबकि मैक्स एक इनपुट है जिसे चेकर अस्वीकार करता है। एक परियोजना अपने स्वयं के प्रोटोकॉल में अतिरिक्त प्रहरी शब्दार्थ को परिभाषित कर सकती है, लेकिन उस विकल्प का अनुमान ToolAcre से नहीं लगाया जाना चाहिए। यदि अंतरसंचालनीयता ऑल-एफ मान को स्वीकार करने पर निर्भर करती है, तो उस नियम का दस्तावेजीकरण करें और स्वामित्व प्रणाली में उसका परीक्षण करें। यह न मानें कि प्रत्येक लाइब्रेरी UUID-आकार की स्ट्रिंग को समान रूप से वर्गीकृत करेगी।

ऑल-एफ मैक्स मान ToolAcre द्वारा अस्वीकार कर दिया गया है; कोई RFC इतिहास या इच्छित कैटेगरी उपयोग का दावा नहीं किया गया है

एक प्रहरी और एक शून्य मान अलग-अलग प्रश्नों का उत्तर तभी देते हैं जब स्कीमा ऐसा कहती है। शून्य सीधे तौर पर किसी रिश्ते की अनुपस्थिति का प्रतिनिधित्व कर सकता है। एक सेंटिनल कॉलम को पॉप्युलेट रखता है और तब उपयोगी हो सकता है जब आसपास का इंटरफ़ेस शून्य नहीं ले जा सकता है, लेकिन यह एक मान बनाता है जो डेटा जैसा दिखता है और इसलिए इंडेक्स, जॉइन, सीरियलाइज़र और कैश के माध्यम से यात्रा करता है। स्पष्ट सुविधा प्रत्येक पाठक में जिम्मेदारी लाती है: प्रत्येक को यह याद रखना चाहिए कि स्वीकृत UUID किसी निर्दिष्ट इकाई का नाम नहीं देता है।

वह व्यापार एक जाल बन जाता है जब प्रहरी रिश्ते के अर्थ को संतुष्ट किए बिना विदेशी-कुंजी आकार की जांच को पूरा कर सकता है। यह अज्ञात, जानबूझकर अनअसाइन किया गया, हटाया गया, या अभी तक संसाधित नहीं होने जैसी विशिष्ट स्थितियों को भी धुंधला कर सकता है। यदि वे स्थितियाँ व्यवहार को प्रभावित करती हैं, तो एक जादुई पहचानकर्ता को ओवरलोड करने के बजाय उन्हें स्पष्ट रूप से प्रस्तुत करें। जहां अनुकूलता के लिए शून्य को बरकरार रखा गया है, राज्य को एक दस्तावेजी अर्थ दें, इसे हर जगह अस्वीकार करें, और पूरे व्यापार कोड में तुलनाओं को बिखेरने के बजाय इसे स्पष्ट रूप से स्वामित्व वाली सीमा में परिवर्तित करें।

सत्यापनकर्ता और विशेष मूल्य - क्यों एक सख्त संस्करण/variant चेक शून्य और अधिकतम को अस्वीकार कर सकता है, और यह कैसे तय करें कि आपका होना चाहिए या नहीं

ToolAcre एक सत्यापनकर्ता के अंदर दो परतें प्रदर्शित करता है। सामान्य इनपुट को ट्रिम कर दिया जाता है, वैकल्पिक बाहरी ब्रेसिज़ हटा दिए जाते हैं, और शेष स्ट्रिंग को कैनोनिकल 8-4-4-4-12 लेआउट प्लस स्वीकृत संस्करण और भिन्न स्थिति के विरुद्ध जांचा जाता है। उस पैटर्न से पहले शून्य का परीक्षण किया जाता है और जानबूझकर स्वीकार किया जाता है। मैक्स के पास कोई अपवाद नहीं है और विफल रहता है। इसका मतलब यह है कि कॉल करने वाला केवल रेगुलर एक्सप्रेशन से विशेष-मूल्य नीति की भविष्यवाणी नहीं कर सकता है; पैटर्न के आसपास नियंत्रण प्रवाह सत्यापन अनुबंध का हिस्सा है।

तीन प्रश्नों को अलग करके अपनी स्वयं की नीति डिज़ाइन करें। सबसे पहले, क्या पाठ उन रूपों में पहचाना जा सकता है जिनकी आपकी सीमा अनुमति देती है? दूसरा, क्या मान एक सामान्य UUID या नामित अपवाद है? तीसरा, क्या इस क्षेत्र और संचालन के लिए उस कैटेगरी की अनुमति है? एक निर्माण समापन बिंदु तब भी शून्य को अस्वीकार कर सकता है जब डायग्नोस्टिक पार्सर इसे पहचानता है, जबकि एक आयात सीमा एक दस्तावेजित विरासत शून्य मार्कर को शून्य में बदल सकती है। उन परिणामों को अलग से लौटाना "पार्सर ने इसे स्वीकार कर लिया" को इसे संग्रहीत करने के लिए आकस्मिक प्राधिकरण बनने से रोकता है।

ToolAcre स्पष्ट रूप से निल को स्वीकार करता है और मैक्स को इसके संस्करण-और-संस्करण पैटर्न के तहत अस्वीकार करता है

एक असाइनी पहचानकर्ता के साथ एक कार्य तालिका पर विचार करें जो "अनअसाइन्ड" के लिए निल का उपयोग करती है। WHERE assignee_id IS NOT NULL के रूप में लिखी गई एक क्वेरी असाइन किए गए कार्यों का चयन करती प्रतीत होती है, लेकिन यह प्रत्येक शून्य पंक्ति का भी चयन करती है क्योंकि प्रहरी एक ठोस स्ट्रिंग है। यदि किसी उपयोगकर्ता के पास वह कुंजी नहीं है, तो एक जुड़ाव उन पंक्तियों को छोड़ सकता है, जिससे दूसरा, कम स्पष्ट परिणाम उत्पन्न होगा। दोनों प्रश्न स्थानीय रूप से उचित हैं; वे असहमत हैं क्योंकि स्कीमा ने असाइनमेंट को सीधे उजागर करने के बजाय एक सामान्य दिखने वाले पहचानकर्ता के अंदर स्थिति को छिपा दिया।

स्थायी समाधान असाइनमेंट को असाइनमेंट के रूप में मॉडल करना है: जब भंडारण अनुबंध इसकी अनुमति देता है तो एक निरर्थक संबंध का उपयोग करें, या जब कई राज्यों को अलग किया जाना चाहिए तो एक स्पष्ट स्थिति जोड़ें। यदि संगतता सीमा अभी भी शून्य भेजती है, तो दृढ़ता से पहले एक बार इसका अनुवाद करें और केवल उस सीमा के लिए मैपिंग को उलट दें। फिर अलग-अलग मामलों के रूप में उत्पन्न संस्करण-4 मान, शून्य, अधिकतम, खाली इनपुट और विकृत पाठ का परीक्षण करें। एप्लिकेशन को प्रत्येक परिणाम को तय करना चाहिए, बजाय इसके कि सामान्य प्रारूप की जांच के बाद जो भी उत्तर वापस आए, उसे इनहेरिट किया जाए।

टेकअवे: विशेष मूल्यों को स्पष्ट रूप से संभालने की आवश्यकता है - ToolAcre जनरेटर के साथ वास्तविक ID उत्पन्न करें और निल और मैक्स को जानबूझकर अपवाद मानें

विशेष मानों को नामित हैंडलिंग की आवश्यकता होती है क्योंकि उनका आकार आपके एप्लिकेशन के इरादे को पूरा नहीं कर सकता है। ToolAcre Web Crypto से सामान्य संस्करण-4 UUID उत्पन्न करता है, आवश्यक होने पर रैंडमUUID से getRandomValues ​​पर वापस आ जाता है और असुरक्षित यादृच्छिक स्रोत का उपयोग करने से इनकार कर देता है। इसके निरीक्षक तब उत्पन्न मूल्य को स्पष्ट रूप से मान्यता प्राप्त शून्य अपवाद से अलग कर सकते हैं। यह टूल को अवलोकन के लिए उपयोगी बनाता है, लेकिन यह डेटाबेस प्रहरी नीति का चयन नहीं करता है या यह साबित नहीं करता है कि स्वीकृत पहचानकर्ता मौजूदा रिकॉर्ड से संबंधित है।

नए पहचानकर्ताओं के लिए जनरेटर का उपयोग करें, और प्रत्येक प्रहरी को एक अलग प्रोटोकॉल निर्णय के रूप में मानें। वर्तमान चेकर में, शून्य मान्य है, संस्करण 0, और यादृच्छिक नहीं; मैक्स को अस्वीकार कर दिया गया है. पेज का परीक्षण करते समय उस अंतर को सुरक्षित रखें, फिर किसी भी मान को स्वीकार करने से पहले अपनी भाषा, डेटाबेस और API के नियमों से इसकी तुलना करें। सुरक्षित टेकअवे जानबूझकर संकीर्ण है: उत्पन्न ID, पार्सर अपवाद, लापता रिश्ते और व्यावसायिक स्थिति अलग-अलग अवधारणाएं हैं, और मजबूत सीमाएं उन्हें अलग रखती हैं।