باعتبارنا مهندسين في الواجهة الخلفية، غالبًا ما يتم تكليفنا ببناء أنظمة يمكنها توسيع نطاق العديد من الموارد والمستخدمين والكيانات والتعامل معها، حيث يحتاج كل منها إلى تعريف فريد. في كثير من الحالات، يبدو استخدام المعرفات التسلسلية (على سبيل المثال، 1، 2، 3) بمثابة حل مباشر، ولكن هذا يمكن أن يصبح مشكلة بسرعة مع نمو التطبيق الخاص بك وتوسيع نطاقه عبر الأنظمة الموزعة. هذا هو المكان الذي تأتي فيه UUIDs (المعرفات الفريدة عالميًا).
في مشاركة المدونة هذه، سنستكشف ما يلي:
UUID (المعرف الفريد عالميًا) هو رقم 128 بت يستخدم لتعريف المعلومات بشكل فريد في أنظمة الكمبيوتر. لقد تم تصميمه ليكون فريدًا عالميًا، مما يعني أن معرفات UUID التي يتم إنشاؤها بشكل مستقل في أنظمة مختلفة لن تتعارض.
يبدو UUID كما يلي:
66e69275-c6bc-800c-90a6-2f41cb991502
يتكون من 32 رقمًا سداسيًا عشريًا، معروضة في خمس مجموعات مفصولة بواصلات، على شكل 8-4-4-4-12.
مفاتيح قاعدة البيانات في الأنظمة الموزعة : في الأنظمة التي تحتاج فيها قواعد البيانات أو الخدمات الصغيرة المختلفة إلى إنشاء معرفات فريدة دون الاتصال ببعضها البعض، تضمن UUIDs التفرد. على سبيل المثال، في منصة التجارة الإلكترونية الموزعة، قد تقوم كل خدمة بإنشاء معرفات الطلب أو المعاملة بشكل مستقل، وسوف تتجنب UUID أي تضارب.
معرفات الجلسة : تُستخدم معرفات UUID بشكل شائع لتحديد جلسات المستخدم في تطبيقات الويب. وهي مفيدة بشكل خاص عندما تحتاج إلى الحفاظ على معلومات الجلسة دون تسريب بيانات حساسة أو يمكن التنبؤ بها.
معرفات الملف أو المورد : عندما تحتاج إلى تتبع الملفات أو المستندات أو أي مورد عبر منصات أو قواعد بيانات مختلفة، يمكن تعيين UUID لكل مورد للبحث السهل دون المخاطرة التكرارات.
واجهات برمجة التطبيقات والمراجع الخارجية : يمكن أن يؤدي الكشف عن المعرفات التسلسلية أو التي يمكن تخمينها بسهولة (على سبيل المثال، المستخدم/1، المستخدم/2) في واجهة برمجة التطبيقات إلى ثغرات أمنية في الخصوصية. باستخدام UUIDs (على سبيل المثال، user/66e69275-c6bc-800c-90a6-2f41cb991502)، فإنك تقلل من احتمالية تخمين المستخدمين والوصول إلى الموارد التي لا تخصهم.
مكتبة uuid الخاصة ببايثون تجعل من السهل إنشاء UUID وإدارتها. وإليك الطريقة:
import uuid # Generate a UUID generated_uuid = uuid.uuid4() print(f"Generated UUID: {generated_uuid}")
تقوم الدالة uuid4() بإنشاء UUID عشوائي بناءً على أرقام عشوائية أو شبه عشوائية، وهو المتغير الأكثر شيوعًا المستخدم في تطوير الويب.
عند استخدام قواعد بيانات مثل PostgreSQL، من الشائع استخدام UUIDs كمفاتيح أساسية. إليك كيفية إعداده في Python باستخدام SQLAlchemy:
from sqlalchemy import Column, String from sqlalchemy.dialects.postgresql import UUID import uuid from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False) username = Column(String, nullable=False) # This will generate a UUID primary key for each new user.
في هذا المثال، نحدد حقل المعرف باعتباره UUID، مما يضمن أن كل مستخدم سيكون لديه معرف فريد لن يتعارض مع السجلات الأخرى، حتى عبر قواعد البيانات الموزعة.
يمكن أن يشكل تجاهل UUIDs لصالح المعرفات المتسلسلة أو المتزايدة تلقائيًا مخاطر عديدة:
الثغرات الأمنية : يمكن التنبؤ بالمعرفات التسلسلية، مما يجعل من السهل على المهاجمين تعداد السجلات واكتشاف البيانات الحساسة. على سبيل المثال، إذا كانت معرفات المستخدمين متسلسلة، فقد يحاول المهاجم تخمين معرفات المستخدمين الأخرى والوصول إلى حسابات غير مصرح بها.
تضارب البيانات : في النظام الموزع، يمكن أن يؤدي الاعتماد على الأعداد الصحيحة المتزايدة تلقائيًا إلى تضارب المعرفات، خاصة عندما تقوم خدمات أو قواعد بيانات متعددة بإنشاء معرفات دون تنسيق مركزي.
مشكلات ترحيل البيانات ودمجها : عند دمج قواعد البيانات أو ترحيل البيانات عبر الأنظمة، قد يؤدي وجود معرفات تسلسلية غير فريدة إلى حدوث تعارضات. تتجنب UUIDs هذه المشكلات من خلال ضمان التفرد.
تخزين UUID كسلاسل : من الأخطاء الشائعة تخزين UUID كسلاسل، مما يهدر المساحة ويمكن أن يبطئ الاستعلامات، خاصة في قواعد البيانات الكبيرة. تحتوي معظم قواعد البيانات الحديثة، مثل PostgreSQL، على أنواع UUID أصلية تخزن UUIDs بكفاءة.
خطأ:
CREATE TABLE users ( id VARCHAR(36) PRIMARY KEY );
يمين:
CREATE TABLE users ( id UUID PRIMARY KEY );
عدم استخدام إصدار UUID الصحيح : هناك عدة إصدارات من UUID (على سبيل المثال، uuid1()، uuid3()، uuid4()، uuid5())، كل منها مناسب لاستخدام محدد حالات. uuid4()، استنادًا إلى أرقام عشوائية، هو الأكثر استخدامًا لإنشاء معرفات فريدة في تطبيقات الويب. انتبه إلى الإصدار الذي تستخدمه وما إذا كان يناسب احتياجاتك.
تجاهل احتمالات الاصطدام : على الرغم من أن UUIDs مصممة لتكون فريدة من نوعها، إلا أن هناك فرصة ضئيلة جدًا للاصطدام. بالنسبة لمعظم التطبيقات، تكون المخاطرة ضئيلة، ولكن إذا كنت تقوم بإنشاء مليارات من UUIDs أو تعمل في بيئات حساسة للغاية، فيجب عليك تنفيذ اكتشاف التصادم.
استخدام UUIDs للمراجع الخارجية: عند كشف المعرفات في عناوين URL أو واجهات برمجة التطبيقات، فضل UUIDs على المعرفات المتسلسلة. يؤدي ذلك إلى تعزيز الأمان ويجعل من الصعب على المستخدمين التنبؤ بمعرفات الموارد.
تخزين UUIDs في التنسيقات الأصلية : استخدم نوع UUID الأصلي لقاعدة البيانات لتخزين UUIDs بدلاً من السلاسل. وهذا يقلل من مساحة التخزين ويحسن أداء الاستعلام.
اختر إصدار UUID الصحيح : في معظم الحالات، uuid4() (UUID العشوائي) هو الخيار الأفضل لإنشاء معرفات فريدة في تطبيقات الويب. ومع ذلك، إذا كنت بحاجة إلى UUIDs التي تم إنشاؤها بشكل حتمي، فقد تفكر في uuid3() أو uuid5() (UUIDs المستندة إلى مساحة الاسم).
التحقق من صحة UUIDs : عند قبول UUIDs من إدخال المستخدم، قم دائمًا بالتحقق من صحتها للتأكد من تنسيقها بشكل صحيح قبل المعالجة. في بايثون، يمكنك استخدام كائنات UUID للتحقق من صحة السلسلة.
def is_valid_uuid(uuid_to_test, version=4): try: uuid_obj = uuid.UUID(uuid_to_test, version=version) return str(uuid_obj) == uuid_to_test except ValueError: return False # Example usage print(is_valid_uuid("66e69275-c6bc-800c-90a6-2f41cb991502")) # True print(is_valid_uuid("invalid-uuid-string")) # False
تعد UUIDs أدوات قوية لإنشاء معرفات فريدة في الأنظمة الموزعة وضمان الأمان في تطبيقات الويب. إنها تساعدك على تجنب مشكلات مثل تضارب البيانات وهجمات المعرفات المتوقعة وتعارضات المعرفات أثناء عمليات ترحيل قاعدة البيانات. من خلال فهم واتباع أفضل الممارسات الخاصة بمعرفات UUID، يمكنك إنشاء أنظمة خلفية أكثر قوة وقابلية للتطوير وآمنة.
تذكر استخدام إصدار UUID المناسب، وتخزينها بشكل صحيح في قواعد البيانات الخاصة بك، وكن على دراية بالمخاطر المحتملة. باستخدام هذه النصائح، ستكون مجهزًا جيدًا للتعامل مع UUIDs بفعالية في مشاريعك!
لا تتردد في التعليق أدناه إذا كان لديك أي أسئلة أو نصائح إضافية حول UUIDs! برمجة سعيدة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3