منذ أن أعلنا لأول مرة عن 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 هو معرف فريد من نوعه عالميًا وآمن للنوع وقابل للفرز مستوحى من الأنواع البادئة لـ Stripe. يوفر TypeID أيضًا معيارًا ثابتًا للغات الأخرى لتنفيذ عملائها ومكتباتها.
تقوم معرفات النوع بتشفير المعرفات الفريدة كسلسلة صغيرة مكونة من ثلاثة أجزاء:
user_2x4y6z8a0b1c2d3e4f5g6h7j8k └──┘ └────────────────────────┘ type uuid suffix (base32)
باستخدام هذا التنسيق، يمكن للعميل المتوافق مع TypeID تشفير معلومات النوع وفك تشفيرها في المعرفات الخاصة بك ثم تشغيل عمليات التحقق في وقت الإنشاء أو الترجمة للتأكد من أنك تستخدم المعرف الصحيح. على سبيل المثال، إذا أردنا إنشاء معرف نوع عشوائي لكيان مستخدم، فيمكننا القيام بشيء مثل هذا:
باستخدام TypeID، يمكننا أيضًا إضافة عمليات التحقق من النوع إلى وظائفنا ورصد الأخطاء في وقت التشغيل. بإعادة كتابة المثال أعلاه، يمكننا الآن التأكد من أن المطورين سيستخدمون المعرفات المناسبة في المكان المناسب:
import { TypeID } from 'typeid-js'; export const getMember = async ( memberId: TypeID, orgId: TypeID, ) => { ... }
بالإضافة إلى أمان الكتابة، يحتوي هذا التنسيق على بعض الخصائص التي تجعل من السهل على المطورين استخدامه:
اليوم، نعلن عن الإصدار 1.0 من مكتبة TypeID-JS الخاصة بنا. يضيف هذا التحديث العديد من الميزات الجديدة لتحسين سهولة الاستخدام وأمان الكتابة، بما في ذلك:
يمكنك إضافة TypeID إلى مشروع JS الخاص بك باستخدام مدير حزم NodeJS الذي تختاره. لا تستخدم JS؟ يحتوي TypeID على 26 تطبيقًا مختلفًا، بدءًا من Go إلى OCaml إلى SQL. إذا كنت مهتمًا بكتابة تطبيق TypeID الخاص بك، فيمكنك التحقق من مواصفاتنا الرسمية.
يقوم فريقنا في Jetify ببناء أدوات مطورة قوية. يمكنك تبسيط عمليات النشر والمشاريع الخاصة بك باستخدام Jetify Cloud، أو أتمتة بيئات التطوير المدمجة باستخدام Devbox. يمكنك متابعتنا على Twitter، أو الدردشة مع المطورين لدينا مباشرة على Discord Server الخاص بنا. نرحب أيضًا بالمشكلات وطلبات السحب على Github Repo الخاص بنا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3