التحقق من أسماء أعلام الميزات
اكتب اسم العلم واعرف فورًا إن كان يتبع الاصطلاح: الاسم enable-checkout-express صالح، فهو يبدأ بالبادئة enable ويتكون من ثلاثة أجزاء بأحرف صغيرة. أما الأحرف الكبيرة أو خلط الفواصل أو الكلمة المفردة فتفشل مع قائمة بالأسباب. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- الاسم
- enable-checkout-express
- النمط
- kebab
- البادئة
- enable
- القطع
- enable, checkout, express
- عدد المقاطع
- 3
تبقى أعلام الميزات (وتُسمّى أيضاً toggles أو gates أو kill switches) قابلة للإدارة فقط عندما يتبع كل اسم اتفاقية مشتركة. خلط حالة الأحرف وبقايا camelCase والاختصارات العشوائية والأعلام بلا بادئة فعل أو مجال يصعّب البحث ويكسر لوحات المتابعة ويسبب تصادمات بين الفرق. مخالفات الاتفاقية تُرجع حمولات نجاح منظمة مع valid بقيمة false وقائمة issues مرتبة حتى تفشل التكامل المستمر البناء بتقرير واضح.
ما الذي تفرضه اتفاقية التسمية
اسم علم الميزة وفق هذه الاتفاقية معرّف آلي قصير وليس نصاً حراً. خلط الواصلات والشرطات السفلية في الاسم نفسه فشل صارم، وكذلك أي حرف كبير أو مسافة أو شرطة مائلة أو ترقيم. ثالثاً، يجب أن ينقسم الاسم إلى مقطعين غير فارغين على الأقل حتى لا يُنشر كلمة منفردة مثل checkout كعلم؛ تحتاج الفرق إلى بادئة وجسم وصفي.
رابعاً، يجب أن يكون المقطع الأول بادئة وصفية معروفة من الكتالوجات الشائعة: enable وdisable وshow وhide وallow وdeny وuse وis وhas وcan وfeature وff وexp وexperiment وrollout وbeta وalpha وnew وlegacy وdark وlight وops وui وapi وweb وmobile وbackend وfrontend وgate وtoggle وflag وrelease وkill وkillswitch وperm أو temp. خامساً، يُحدّ الطول بستين وأربعة أحرف لتوافق مخازن الإعداد ومتغيرات البيئة ومعاملات استعلام URL. تُرفض الفواصل البادئة أو اللاحقة أو المزدوجة ليبقى الكود المولَّد ومرشحات regex بسيطة.
عقد الإدخال وشكل الاستجابة وسلوك الأخطاء
القيمة المثال enable-checkout-express علم kebab-case صالح ببادئة enable. عندما يستوفي الاسم كل القواعد تكون valid بقيمة true وissues مصفوفة فارغة وstyle إما kebab أو snake. تُحوَّل الأرقام إلى سلاسل؛ تُرفض الكائنات والمصفوفات.
لأن التنفيذ parse نقي من المستوى A تكون النتائج مستقرة بين بيئات التشغيل بلا شبكة وبلا طوابع زمنية.
أين تثبت فائدة التحقق من أسماء الأعلام
تربط فرق المنصة وتجربة المطوّر هذا الفحص بمولّدات الهيكلة حتى لا تدخل أعلام جديدة بلا بادئة ولا أسلوب فاصل. تفحص مهام التكامل المستمر طلبات الدمج التي تمس كتالوجات الأعلام أو ملفات بيئة المثال وتفشل البناء عندما يربك الاسم المشغّلين بعد أشهر. تستخدم أدوات تحليل المنتج والتجارب القواعد نفسها عند تسجيل مفاتيح الإطلاق حتى تجمع لوحات المتابعة حسب البادئة باتساق عبر mobile وweb وbackend.
تستفيد مواقع التوثيق التي تنافس على عبارة اتفاقية تسمية أعلام الميزات من ودجة حية يطابق مسارها المجاني في المتصفح مسار الأتمتة المدفوع على الوحدة النقية نفسها. اجعلوا جدول البوادئ متوافقاً مع أسلوب منظمتكم بربط الأفعال الداخلية بالمجموعة المدعومة، أو غلّفوا هذه النقطة الطرفية وارفضوا أي بادئة تحظرها سياستكم حتى لو اجتازت الاتفاقية الأساسية.
حالات الاستخدام
سكربتات الترحيل والتنظيف
افحصوا على دفعات أعلام camelCase أو UPPER_SNAKE القديمة وأصدروا قائمة issues مقروءة آلياً لكل مرشح لإعادة التسمية.
الأسئلة الشائعة
ماذا يحدث إذا كان الاسم فارغاً؟
الأسماء الفارغة أو المسافات فقط لا يمكن تقييمها وفق الاتفاقية.
ما البوادئ الوصفية المسموح بها؟
بوادئ كتالوج شائعة مثل enable وdisable وshow وhide وfeature وff وexp وexperiment وrollout وbeta وapi وui وgate وtoggle وrelease وkill وعلامات مجال أو نية مشابهة يسردها المدقق.
هل يمكنني الجمع بين الشرطة والشرطة السفلية في الاسم نفسه؟
لا. يستخدم كل اسم نوعًا واحدًا من الفواصل من أوله إلى آخره: الشرطات أو الشرطات السفلية، وليس الاثنين معًا. والخلط بينهما رفض مباشر، مثل الحرف الكبير أو المسافة أو الشرطة المائلة أو أي علامة ترقيم.
لماذا تُرفض كلمة واحدة مثل checkout؟
لأن الاصطلاح يتطلب جزأين غير فارغين على الأقل: بادئة معروفة مثل enable أو rollout، ثم جزءًا وصفيًا. فالكلمة المفردة لا توضح نوع المفتاح ولا الجزء من المنتج الذي ينتمي إليه.
كم حرفًا يمكن أن يبلغ طول اسم العلم؟
حتى 64 حرفًا. يبقي هذا الحد الأسماء عملية في ملفات الإعداد ومتغيرات البيئة وعناوين الويب. وتُرفض أيضًا الفواصل في البداية أو النهاية أو المكررة متتالية.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/feature-flag-name-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"enable-checkout-express"}'const res = await fetch("https://api.kit.forhosting.com/dev/feature-flag-name-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "enable-checkout-express"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/feature-flag-name-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"name": "enable-checkout-express"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/feature-flag-name-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"name":"enable-checkout-express"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"name":"enable-checkout-express"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/feature-flag-name-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"name": "enable-checkout-express"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.feature_flag_name_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تتحقق هذه القدرة من اسم مرشح وفق نمط عملي شائع في الصناعة: غير فارغ، كله بأحرف صغيرة ASCII، إما kebab-case بواصلات أو snake_case (لا يُخلط الفاصلان في السلسلة نفسها)، مقطعين على الأقل، بادئة وصفية مثل enable أو feature أو ff أو rollout أو beta، ستون وأربعة أحرف كحد أقصى، دون فواصل على الحواف أو متتالية. الإدخال الفارغ يفشل بـ invalid_input ولا يُفوتر. المنطق النقي نفسه يشغّل ودجة المتصفح المجانية ومسار API المدفوع مسبقاً بسعر $0.002 لكل استدعاء ناجح.
ما الذي تفرضه اتفاقية التسمية
أولاً، يجب ألا يكون فارغاً أو مسافات فقط: الاسم الفارغ يُرفض فوراً بـ invalid_input لأنه لا يوجد ما يُقيَّم. ثانياً، كل حرف يجب أن يكون حرف ASCII صغيراً أو رقماً وأسلوباً واحداً فقط من الفواصل: واصلات لـ kebab-case أو شرطات سفلية لـ snake_case. معاً تطابق هذه القواعد مفاتيح بأسلوب LaunchDarkly ومفاتيح Unleash ومعظم ملفات JSON أو YAML الداخلية دون اختراع لهجة خاصة بمورد واحد.
عقد الإدخال وشكل الاستجابة وسلوك الأخطاء
أرسل جسم JSON يحتوي حقل سلسلة إلزامي اسمه name (يقبل المعالج أيضاً الاسمين البديلين flag_name وtext لمرونة النقل). عند النجاح تتضمن الاستجابة دائماً valid (منطقي) وname بعد القص وstyle (kebab أو snake أو null إن تعذّر التصنيف) وprefix (المقطع الأول أو null) وsegments كمصفوفة سلاسل مرتبة وsegment_count وhas_descriptive_prefix وissues كقائمة مستقرة مرتبة من رموز مقروءة آلياً وجملة convention قصيرة مناسبة للواجهة. عندما يكون الاسم موجوداً لكنه يكسر الاتفاقية تكون valid بقيمة false وتسرد issues رموزاً مثل not_lowercase وmixed_separators وmissing_descriptive_prefix وtoo_few_segments وinvalid_characters وconsecutive_separators وleading_or_trailing_separator وtoo_long وmissing_separator_segments أو invalid_pattern—دون رمي استثناء—حتى تطبع أدوات الفحص وروبوتات طلبات الدمج كل المشكلات دفعة واحدة. الأسماء الفارغة أو المفقودة أو غير السلسلة فقط ترمي invalid_input؛ هذه الإخفاقات لا تستهلك الرصيد المدفوع مسبقاً.
أين تثبت فائدة التحقق من أسماء الأعلام
تستدعي روبوتات مراجعة الشيفرة واجهة API بسلسلة مرشحة وتلصق قائمة issues في خيط المراجعة بدلاً من الجدال حول الأسلوب بالذوق. لأن كل استدعاء ناجح يكلف السعر الأساسي المنشور $0.002 بلا رموز نموذج، يمكنكم التحقق من آلاف الأسماء في سكربت ترحيل دون إنفاق مفاجئ؛ تظل الإرسالات الفارغة بلا رسوم كأخطاء عميل.
حالات التكامل
فحص CI لكتالوجات الأعلام
افحصوا ملفات YAML أو JSON للأعلام في طلبات الدمج وافشلوا البناء إذا كان أي اسم فارغاً أو مختلط الحالة أو بلا بادئة وصفية.
الهيكلة ومولّدات سطر الأوامر
تحققوا من الاسم الذي يكتبه المطوّر قبل كتابة enable-foo-bar في الإعداد أو هياكل SDK أو لوحات feature toggles.
أسئلة تقنية
ما اسم علم الميزة الصالح؟
سلسلة غير فارغة بأحرف صغيرة بصيغة kebab-case أو snake_case، مقطعين على الأقل، المقطع الأول بادئة وصفية (مثل enable أو feature أو ff)، 64 حرفاً كحد أقصى، دون خلط الفواصل.
هل تُقبل أسماء camelCase أو PascalCase؟
لا. الأحرف الكبيرة تنتج not_lowercase في قائمة issues وتكون valid بقيمة false. حوّلوا أولاً إلى kebab-case أو snake_case.
كم تكلفة مدقق أسماء أعلام الميزات؟
أداة المتصفح مجانية. طلبات API تستخدم رصيد KIT المدفوع مسبقاً بسعر $0.002 لكل استدعاء ناجح؛ الإدخال الفارغ غير الصالح لا يُفوتر.