"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > TypeID-JS: اكتب معرفات فريدة آمنة وقابلة للفرز لجافا سكريبت

TypeID-JS: اكتب معرفات فريدة آمنة وقابلة للفرز لجافا سكريبت

تم النشر بتاريخ 2024-08-05
تصفح:314

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

منذ أن أعلنا لأول مرة عن TypeID العام الماضي، شهدنا اعتمادًا واهتمامًا كبيرًا من المجتمع، مع 23 عميل لغة مختلفًا ساهم بهم المجتمع و90.000 تنزيل NPM أسبوعيًا لتنفيذ Typescript الخاص بنا .

في الأسبوع الماضي، أصدرنا الإصدار 1.0 من تطبيق TypeScript، TypeID-JS. للاحتفال بهذا الإصدار، أردنا مشاركة المزيد حول سبب كتابتنا لـ TypeID، وكيف نستخدمه لضمان أمان الكتابة في Jetify.

اكتب الأمان والمعرفات الفريدة

لقد طورنا فكرة TypeID أثناء بناء Jetify Cloud، الحل الخاص بنا لنشر وإدارة المشاريع القائمة على Devbox أو Docker عبر فريقك. تحتوي بنية Jetify Cloud على العديد من الكيانات المختلفة التي نحتاج إلى إدارتها: المؤسسات، والمستخدمون، وعمليات النشر، والأسرار، والمشاريع، وكلها تتطلب معرفات فريدة لتمييزها.

في الأصل، بدأنا باتباع أفضل الممارسات وتعيين UUID لكل مثيل للكيان. ومع ذلك، واجهنا مشكلة بسرعة: يفتقر UUIDv7 إلى أمان النوع! خذ الكود أدناه كمثال:

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 };
};

تستخدم هذه الوظيفة معرفين UUID للبحث عن عضو ومؤسسة. ومع ذلك، لا يمكن للوظيفة التأكد من أن memberID وorgID يمثلان الكيان الصحيح! إذا استخدم أحد المطورين عن طريق الخطأ معرف العضو حيث كنا نتوقع معرف المؤسسة، فلن نكتشف المشكلة إلا في وقت التشغيل.

بينما كنا نبحث عن حلول لهذه المشكلة، واجهنا معرف كائن Stripe، الذي يقوم بتشفير معلومات النوع في معرفات باستخدام بادئة. بدا هذا حلاً رائعًا، ولكن لسوء الحظ، لم نتمكن من العثور على معيار محدد جيدًا لتنفيذ المعرفات المكتوبة بشكل متسق عبر لغات متعددة.

TypeID: معرفات فريدة عالمية قابلة للفرز وآمنة للنوع

TypeID هي محاولتنا لإنشاء مثل هذا المعيار المتسق. TypeID هو معرف فريد من نوعه عالميًا وآمن للنوع وقابل للفرز مستوحى من الأنواع البادئة لـ Stripe. يوفر TypeID أيضًا معيارًا ثابتًا للغات الأخرى لتنفيذ عملائها ومكتباتها.

تقوم معرفات النوع بتشفير المعرفات الفريدة كسلسلة صغيرة مكونة من ثلاثة أجزاء:

  1. بادئة تمثل نوع المعرف (63 حرفًا، أحرف ASCII صغيرة)
  2. فاصل الشرطة السفلية (_)
  3. UUIDv7 128 بت مشفر كسلسلة مكونة من 26 حرفًا باستخدام ترميز base32 المعدل.
  user_2x4y6z8a0b1c2d3e4f5g6h7j8k
  └──┘ └────────────────────────┘
  type    uuid suffix (base32)

باستخدام هذا التنسيق، يمكن للعميل المتوافق مع TypeID تشفير معلومات النوع وفك تشفيرها في المعرفات الخاصة بك ثم تشغيل عمليات التحقق في وقت الإنشاء أو الترجمة للتأكد من أنك تستخدم المعرف الصحيح. على سبيل المثال، إذا أردنا إنشاء معرف نوع عشوائي لكيان مستخدم، فيمكننا القيام بشيء مثل هذا:

باستخدام TypeID، يمكننا أيضًا إضافة عمليات التحقق من النوع إلى وظائفنا ورصد الأخطاء في وقت التشغيل. بإعادة كتابة المثال أعلاه، يمكننا الآن التأكد من أن المطورين سيستخدمون المعرفات المناسبة في المكان المناسب:

import { TypeID } from 'typeid-js';

export const getMember = async (
  memberId: TypeID,
  orgId: TypeID,
) => {
    ...
}

بالإضافة إلى أمان الكتابة، يحتوي هذا التنسيق على بعض الخصائص التي تجعل من السهل على المطورين استخدامه:

  1. متوافق مع UUIDv7: يمكنك بسهولة تحويل TypeID إلى UUID عن طريق إزالة البادئة وفك تشفير اللاحقة.
  2. K-sortable: يمكنك استخدام TypeID كمفتاح أساسي قابل للفرز في قاعدة بياناتك بموقع جيد.
  3. عنوان URL الآمن: نستخدم معرفات TypeID في عناوين URL الخاصة بنا لتسهيل نسخها ولصقها ومشاركتها. يؤدي تضمين TypeIDs في عنوان URL إلى تبسيط عملية إنشاء حالة الصفحة.
  4. يمكن تحديده بسهولة: يمكنك نسخه ولصقه بالنقر المزدوج (جربه!)

ميزات جديدة في TypeID-JS v1.0

اليوم، نعلن عن الإصدار 1.0 من مكتبة TypeID-JS الخاصة بنا. يضيف هذا التحديث العديد من الميزات الجديدة لتحسين سهولة الاستخدام وأمان الكتابة، بما في ذلك:

  1. معرفات TypeID غير المعبأة والمعتمدة على الوظيفة والقابلة للتدفق: هذا يجعل من الممكن إجراء تسلسل لمعرفات TypeID دون إرسالها إلى سلاسل ويتيح لك استخدام معرفات TypeID كمفاتيح في الخرائط والمجموعات.
  2. فحص أكثر صرامة للنوع ووقت التشغيل: يعرض TypeID الآن خطأ إذا حاولت تحليل سلسلة فارغة أو معرف كتابة ببادئة خاطئة.
  3. التوافق مع مواصفات TypeID v3: يمكن لمعرفات TypeID لـ JS الآن استخدام الشرطة السفلية في البادئة. على سبيل المثال: pro_subscription_2x4y6z8a0b1c2d3e4f5g6h7j8k هو معرف TypeID صالح مع البادئة pro_subscription.

كيفية استخدام TypeID مع مشروعك

يمكنك إضافة TypeID إلى مشروع JS الخاص بك باستخدام مدير حزم NodeJS الذي تختاره. لا تستخدم JS؟ يحتوي TypeID على 26 تطبيقًا مختلفًا، بدءًا من Go إلى OCaml إلى SQL. إذا كنت مهتمًا بكتابة تطبيق TypeID الخاص بك، فيمكنك التحقق من مواصفاتنا الرسمية.

هل تتطلع إلى تعزيز فريق التطوير الخاص بك؟

يقوم فريقنا في Jetify ببناء أدوات مطورة قوية. يمكنك تبسيط عمليات النشر والمشاريع الخاصة بك باستخدام Jetify Cloud، أو أتمتة بيئات التطوير المدمجة باستخدام Devbox. يمكنك متابعتنا على Twitter، أو الدردشة مع المطورين لدينا مباشرة على Discord Server الخاص بنا. نرحب أيضًا بالمشكلات وطلبات السحب على Github Repo الخاص بنا.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/jetify/typeid-js-type-safe-k-sortable-unique-ids-for-javascript-djh?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3