الخلاصة

  • تقول صفحة واجهة التسجيل لدى LACNIC إن أحدث وثائق v3 موجودة في Postman، لكنها تعرض تعديل ROA وحذفه عبر /rpki/roas/{serialNumber} كعملية على سجل منفرد.
  • تستخدم المجموعة المنشورة organizationId لاسترجاع قائمة المؤسسة وإنشائها وتحديثها؛ ويصف PUT استبدال القائمة القائمة بنسخة محدثة، كما يرسل الإلغاء قائمة على مستوى المؤسسة.
  • يمكن للحالة المطلوبة الكاملة أن تكون ذرية وقابلة لإعادة المحاولة. تصبح قابلة للتدقيق عندما تحمل هوية الحالة الأساسية وفارقاً متوقعاً وفحصاً مسبقاً ونتيجة عملية واحدة وسلسلة تصحيح.

تضع صفحة واجهة التسجيل لدى LACNIC ترتيباً واضحاً للمراجع. فهي ترسل من يريد وثائق الإصدار الثالث الأكثر حداثة إلى Postman. كذلك تعيد نقطة /lacnic/v3/info التوجيه إلى الوثيقة المنشورة ذاتها. بالنسبة إلى مطوّر عميل جديد، تبدو المجموعة هي العقد التنفيذي الذي ينبغي اتباعه.

لكن الجدول الموجود في الصفحة نفسها يرسم حدوداً أخرى. الإنشاء والاسترجاع عند /rpki/roas، أما التعديل والإزالة فعند /rpki/roas/{serialNumber}. الرقم التسلسلي يحدد عنصراً واحداً. معنى الطلب هو تغيير هذا السجل من دون إصدار حكم على بقية سجلات المؤسسة.

في مجموعة API Registro v3 Prod تتحول المؤسسة إلى وحدة الكتابة. يستخدم GET وPOST المسار /lacnic/v3/rpki/roas/{organizationId}. ويستخدم PUT المسار نفسه مع وصف يقول إنه يستبدل القائمة الحالية بنسخة محدثة. أما الإلغاء فيرسل قائمة إلى /lacnic/v3/rpki/roas-delete/{organizationId}.

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

لماذا قد يكون الاستبدال الكامل هو التصميم الأفضل

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

يساعد هذا الأسلوب أيضاً على إعادة المحاولة. إذا نُفذ PUT وضاعت الاستجابة، يمكن أن يؤدي إرسال القائمة نفسها مرة أخرى إلى النتيجة نفسها من دون إنشاء أثر إضافي. وهذا مناسب لأنظمة إدارة عناوين IP وعمليات المطابقة الدورية وأتمتة أمن التوجيه.

وقد تكون لدى LACNIC ضوابط لا تظهر في المثال العام. يمكنها تسلسل عمليات المؤسسة، أو مقارنة مراجعة داخلية، أو رفض الحالة القديمة، أو حفظ سجل محمي، أو عرض الفارق للمستخدم بعد تسجيل الدخول. لم تستخدم هذه الدراسة حساباً أو مفتاح API، ولم تنشئ ROA أو تعدله أو تلغيه. عدم ظهور الضابط في المثال لا يثبت عدم وجوده في الإنتاج.

لذلك يبقى النقد محدوداً: لا يبين العقد العام كيف تُربط القائمة الكاملة بالحالة التي بُنيت عليها.

القائمة القديمة قد تحوّل الجهل إلى إزالة

لنأخذ أداتين مفوضتين لدى المؤسسة نفسها. تقرأ الأولى القائمة لإضافة بادئة جديدة. وكانت الثانية قد قرأت القائمة في وقت سابق لكي تصحح maxLength في ROA مختلف. كل أداة تبني قائمة كاملة متماسكة بالنسبة إلى اللحظة التي رأتها.

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

لم تظهر في حقول الطلب والاستجابة العامة علامة ETag أو If-Match أو رقم مراجعة أو بصمة للقائمة الأساسية أو شرط مماثل. كما لم يظهر dry-run أو preview أو diff. مثال GET يعيد مصفوفة عارية ولا يعرض من رؤوس الاستجابة سوى Content-Type. ومثال التحديث لا ينشر جسماً أو رؤوساً للاستجابة.

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

تزداد أهمية الحد لأن ROA يحمل تفويضاً ذا أثر. يحدد RFC 9582 ملف ROA الحالي، ويربط موارد IP برقم AS للأصل، وقد يتضمن طولاً أقصى. ويشرح RFC 9319 كيف يؤثر maxLength في نطاق الإعلانات الأكثر تحديداً التي يغطيها التفويض.

إضافة ROA أو تضييقه أو إسقاطه من القائمة قد تغير الأدلة التي تقارن بها جهات التحقق إعلانات المسارات. ولا يعني ذلك أن LACNIC تقرر سياسة الموجّهات؛ فالمستودعات وأدوات التحقق والشبكات تملك قرارات مستقلة. المطلوب من واجهة التسجيل هو إثبات انتقالها هي، لا ادعاء السيطرة على ما يحدث بعدها.

تعريف تنفيذي واحد بدلاً من ثلاث روايات

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

تسجل بيانات Postman تاريخ نشر في يونيو 2023، لكنها لا تثبت تاريخ آخر تعديل. وقد جرى جلب المجموعة تحت وسم latest النشط. لا ينبغي أن يختار المشغّل الحقيقة بتخمين أي تاريخ أحدث، بل بقراءة معرّف عقد واحد على كل واجهة.

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

ثم يأتي الفحص المسبق. يعرض الإضافات والتعديلات والإزالات مع البادئة ورقم AS للأصل وmaxLength. يظهر العنصر الذي اختفى بسبب تسلسل ناقص بوصفه إزالة قبل أن يتحول إلى أثر فعلي. ويظهر فساد الصيغة أو قدم الأساس قبل الكتابة.

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

عنصر العقد السؤال الذي يجيب عنه
نسخة المسار والبنية أي دلالة للكتابة نُفذت؟
المؤسسة وهوية القائمة الأساسية أي حالة رآها العميل؟
فارق الإضافة والتغيير والإزالة ماذا قصدت القائمة الكاملة أن تفعل؟
الفحص المسبق هل ظهر الخطأ أو تقادم الأساس قبل التغيير؟
العملية والنتيجة الذريتان هل قُبل الانتقال أم رُفض أم جرى التحقق من نتيجته؟
رابط التصحيح أي قرار لاحق استبدل قراراً سابقاً؟

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

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

المصادر