FreeToGenerate.com

لا تتضمن المواصفة نهيًا واحدًا، ولهذا يعيد لك القالب المعطوب رابطًا لا خطأً. لا يُرفع أي شيء.

جرّب واحدًا:

كل ما بين قوسين معقوفين تعبير، وما عداه يُنقل كما هو، مع ترميز الحروف التي لا يحملها الرابط في أثناء ذلك.

بصيغة JSON. النص قيمة مفردة، والمصفوفة قائمة، والكائن مجموعة أزواج من اسم وقيمة. وأي اسم تتركه يبقى غير معرَّف فلا يُنتج شيئًا.

النتيجة

https://api.github.com/repos/vercel/next.js/issues?state=open&labels=bug%2Chelp%20wanted&per_page=50

الرابط بعد التوسيع.

ما الذي أنتج ماذا

من القالبيُنتجالنوع
https://api.github.com/reposhttps://api.github.com/reposنص حرفي
{/owner,repo}/vercel/next.jsتعبير
/issues/issuesنص حرفي
{?state,labels,per_page}?state=open&labels=bug%2Chelp%20wanted&per_page=50تعبير

كل صف جزء من القالب والجزء الذي أنتجه من النتيجة. والصف المعلَّم خطأً أسهم بنفسه من دون تغيير.

عن هذا القالب

المستوى
الثالث، ويضيف معاملات المسار والاستعلام وعدة متغيرات في التعبير الواحد
المتغيرات التي يسمّيها
owner, repo, state, labels, per_page (5)

كل هذا يجري داخل متصفحك. ولا يُرفع شيء مما تكتبه.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

موسّع قوالب URI حسب RFC 6570 بمستوياته الأربعة

الصق قالبًا وبعض القيم لتحصل على الرابط، ولترى بالضبط أي جزء من القالب أنتج أي جزء من النتيجة.

ما قالب URI؟

قالب URI رابطٌ فيه فجوات. فالاسم بين قوسين معقوفين وسط المسار فجوة، وكذلك القائمة بين قوسين في آخره تبدأ بعلامة استفهام فتصير سلسلة استعلام. تعطيه مجموعة قيم فيصير رابطًا حقيقيًّا. والصيغة هي RFC 6570، وهي أقدر من مجرد استبدال نصوص: تميّز مقطع المسار من معامل الاستعلام، وتُهرّب كلًّا منهما بقواعده، وتعرف كيف تحوّل قائمة واحدة إلى معاملات مكررة.

ولا شك أنك تلقيت واحدًا منها دون أن يخبرك أحد. اطلب أي شيء من واجهة GitHub تجد الاستجابة مملوءة بها: فالمستند الجذر وحده يعيد حقولًا تنتهي بمعرّف gist بين قوسين وبزوج معاملات ترقيم صفحات بين قوسين كذلك. وهذه غاية الصيغة: يصف الخادم مرة واحدة شكل فضاء من الروابط، ويملأ العميل الفجوات، بدل أن يلصق كل عميل نصوصًا بيده فيخطئ في التهريب.

وللقوالب أربعة مستويات. الأول استبدال محض. والثاني يضيف التوسيعين اللذين يمرران الشرطة المائلة وسائر الحروف المحجوزة بلا مساس. والثالث يضيف معاملات المسار والاستعلام والجزء، ويتيح تسمية عدة متغيرات في تعبير واحد. والرابع يضيف معدِّلَي القيمة: الاكتفاء بأوائل الحروف، أو تفكيك قائمة إلى معاملات مكررة. أما قالب GitHub الحقيقي فيقف عند الثالث، وهذا جدير بالمعرفة، لأن الرابع هو بالضبط حيث تبدأ التطبيقات في الاختلاف.

طريقة الاستخدام

  1. الصق قالبًا. كل ما بين قوسين معقوفين تعبير، وما عداه يُنقل كما هو مع ترميز الحروف التي لا يحملها الرابط في أثناء ذلك. وأزرار الأمثلة تغطي قالبًا حقيقيًّا من واجهة برمجية، ومعاملًا مكررًا، والتوسيع المحجوز، وبادئة.
  2. أعطه قيمًا بصيغة JSON. النص قيمة مفردة، والمصفوفة قائمة، والكائن مجموعة أزواج من اسم وقيمة. وترك اسم من غير قيمة ليس خطأً: فالمتغير غير المعرَّف لا يُنتج شيئًا، وهكذا تعمل المعاملات الاختيارية بالضبط.
  3. اقرأ التفصيل. تحت النتيجة صفٌّ لكل جزء من القالب ومعه جزء الرابط الذي أنتجه. وهناك تتضح قواعد التهريب، وهناك يظهر الخطأ صفًّا أسهم بنفسه من غير تغيير.

القالب المعطوب يعطيك رابطًا أيضًا

اكتب قالبًا فيه خطأ فلن تتوقف هذه الأداة. ستوسّع كل ما استطاعت، وتنقل الجزء المعطوب كما كتبتَه تمامًا، وتخبرك أسفله بما الخلل. وليس هذا تساهلًا بل هو نص المواصفة: إذا صادف المعالج تعبيرًا فاسدًا، وجب نقل الجزء غير المعالَج إلى النتيجة بلا توسيع، ووجب أن تستمر المعالجة، ووجب إعلام المستدعي بموضع الخطأ ونوعه. وتصف المواصفة الناتج بأنه لا يصلح إلا للتشخيص.

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

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

مواصفة بلا نواهٍ

لا يتضمن RFC 6570 أي MUST NOT ولا أي SHOULD NOT، ولا واحدًا، خارج الفقرة المعتادة التي تشرح معاني هذه الكلمات. وفي المستند كله أربعة MUST وسبعة SHOULD وثلاثة MAY. وهذا غير مألوف، وهو يفسّر ما سواه: فحين تُكتب معالجة الأخطاء بصيغة SHOULD يكون التطبيق مطابقًا سواء اتّبعها أم لم يتّبعها، وهو في الغالب لا يتّبعها.

وفيها كذلك موضع تناقض نفسها فيه، وتتبع هذه الأداةُ مجموعةَ الاختبارات لا القواعدَ النحوية. فالقاعدة التي تحدد ما يجوز وروده خارج التعبير تستثني الفاصلة العليا وتذكرها بالاسم بين الحروف الممنوعة. لكن الفاصلة العليا جائزة في الرابط، والقسم الذي فوقها مباشرة يقول إن الحروف الجائزة في الرابط تُنقل كما هي، ومجموعة المطابقة الرسمية فيها حالة تشترط بقاء الفاصلة العليا، مصنَّفةً تحت رقم القسم نفسه الذي تمنعها قواعده. والغلبة هنا للمجموعة.

وقاعدة أخيرة تستحق المعرفة لأنها لا تُرى في القالب. فطلب أوائل حروف قيمةٍ يَعُدّ الحروف لا الوحدات التي تصادف أن تخزّنها بها لغة البرمجة. وتقول المواصفة ذلك مرتين وتذكر السبب: منعًا لأن يقطع تطبيقٌ حرفًا نصفين. اطلب من المكتبتين المقيستين أول حرف من علامة مفتاح موسيقي فلا تعيده أي منهما: بل ترمي كلتاهما خطأً، لأن قطع نص JavaScript عند الموضع الأول يشطر ذلك الحرف نصفين ويترك جزءًا فاسدًا.

ما لا تفعله هذه الأداة

لا تسير في الاتجاه المعاكس. فاستخراج القيم من رابط تام، أي المطابقة بدل التوسيع، مسألة أصعب بكثير، والمواصفة نفسها تتنصل منها بعباراتها: تقول إن المطابقة لا تحسن إلا حين تحدّ التعبيراتِ أطرافُ الرابط أو حروفٌ لا يمكن ورودها في التوسيع، وإن التعابير النمطية أنسب لهذا العمل عمومًا. والقالب المنتهي بمتغيرين متلاصقين بلا شيء بينهما لا جواب واحدًا صحيحًا له.

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

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

لماذا هي مجانية؟

توسيع القالب معالجةُ نصوص، وهو يجري داخل متصفحك. فلا خادم في المسار، ولا شيء يستوجب فاتورة، ولا حساب يلزم إنشاؤه.

ولا يُرفع أي شيء. فالقالب الذي تلصقه والقيم التي تكتبها تبقى في هذا التبويب.