قيّم واجهة API الأرشفة بسلوكها حين يسوء شيء، لا حين ينجح الطلب. أربعة أسئلة تكفي لكشف أغلب المشكلات قبل التعاقد:
- الأخطاء: هل تعيد الواجهة رموز حالة HTTP صحيحة وجسم خطأ ثابت البنية يمكن لبرنامج أن يقرأه؟
- إعادة المحاولة: هل يعرف المطوّر أي الأخطاء تُعاد وأيها لا، ومتى؟
- التكرار: إن أُعيد إرسال المستند نفسه بعد انقطاع، هل يُنشأ مرتين؟
- حدود الاستخدام: هل الحدود موثقة، وهل تعلن الواجهة تجاوزها بطريقة قياسية مع مدة انتظار؟
يوفر وثيقة REST API لربط الأنظمة المؤسسية، وتفاصيل هذه السلوكيات تُطلب مكتوبة في العرض الفني وتُختبر في بيئة تجريبية قبل القبول.
حين يقارن مهندس التكامل أو مدير تقنية المعلومات بين عروض أنظمة أرشفة، يُطلب منه غالبًا رأي في «جودة الواجهة البرمجية». عبارة «يوفر API مفتوحًا وموثقًا» تظهر في كل العروض تقريبًا، ولا تقول شيئًا عما سيحدث في الليلة التي ينقطع فيها الاتصال أثناء إرسال ثلاثة آلاف فاتورة. ما يلي معايير قابلة للاختبار، مبنية على معايير HTTP المعتمدة، وقائمة اختبارات يمكن تنفيذها في يوم عمل واحد على بيئة تجريبية.
لماذا تقيّم الفشل لا النجاح؟
كل واجهة تنجح في العرض التوضيحي: طلب واحد، مستند واحد، شبكة مستقرة. في التشغيل الفعلي، الربط بين نظام ERP أو CRM والأرشيف يعمل آلاف المرات، وسيواجه انقطاعًا في الشبكة، وخادمًا مشغولًا، ومستندًا بحقل ناقص، ورمز دخول منتهي الصلاحية. الفرق بين ربط يُنسى بعد تشغيله وربط يستهلك فريق الدعم كل أسبوع هو كيف تتعامل الواجهة مع هذه الحالات، وكيف تُبلغ عنها.
والنتيجة الأسوأ ليست الفشل الظاهر، بل الفشل الصامت: مستند لم يصل ولم يُسجَّل خطأ، أو مستند وصل مرتين فأصبح في الأرشيف نسختان من الفاتورة نفسها. معايير هذا المقال مصممة لكشف هذين تحديدًا.
الأخطاء: ما الذي يجب أن تعيده الواجهة؟
ثلاثة متطلبات أساسية تكتبها في كراسة الشروط:
- رموز حالة صحيحة: خطأ في الطلب نفسه (حقل ناقص، نوع ملف غير مسموح) يعيد رمزًا من فئة 4xx، وخطأ في الخادم يعيد رمزًا من فئة 5xx. واجهة تعيد 200 مع رسالة «فشل» داخل الجسم تجبر المطوّر على قراءة كل استجابة نصيًا، وتخفي الأخطاء عن أدوات المراقبة.
- جسم خطأ ثابت البنية: حقول معروفة في كل خطأ: نوع الخطأ، ووصف مختصر، وتفصيل خاص بهذه الحالة، ومعرّف يسمح بتتبعها في سجلات المورد. يعرّف المعيار RFC 9457 صيغة «تفاصيل المشكلة» لواجهات HTTP بحقول type وtitle وstatus وdetail وinstance، ويمكن أن يكون مرجعًا مفيدًا، وإن لم يكن إلزاميًا.
- أخطاء تحدد الحقل: «بيانات غير صالحة» لا تساعد. «حقل رقم الفاتورة مطلوب لنوع المستند فواتير الموردين» يوفر ساعة تحقيق.
اختبار سريع: أرسل عشرة طلبات خاطئة عمدًا بأشكال مختلفة، واطبع رمز الحالة وجسم الاستجابة لكل منها في جدول. إن لم تستطع كتابة برنامج واحد يصنّف الأخطاء العشرة دون قراءتها بعينك، فالواجهة ستكلفك في التشغيل.
إعادة المحاولة: أي خطأ يُعاد ومتى؟
ليس كل خطأ يستحق إعادة. إعادة طلب خاطئ في بنيته ألف مرة لن تجعله صحيحًا، وعدم إعادة طلب فشل بسبب انقطاع مؤقت يعني فقد مستند. اطلب من المورد جدولًا صريحًا كهذا، أو اكتبه أنت وتحقق منه:
| الحالة | أمثلة رموز | هل يُعاد؟ | كيف |
|---|---|---|---|
| خطأ في بيانات الطلب | 400، 422 | لا | يُسجَّل ويُحال لمراجعة بشرية أو لتصحيح البيانات في المصدر |
| فشل المصادقة | 401 | مرة واحدة بعد تجديد الرمز | إن تكرر يُنبَّه المسؤول؛ قد يكون الحساب معطلًا |
| لا صلاحية | 403 | لا | خطأ في إعداد صلاحيات الحساب التقني |
| تعارض (المستند موجود مثلًا) | 409 | لا يُعاد كما هو | يُعامل بحسب قاعدة منع التكرار |
| تجاوز حد الاستخدام | 429 | نعم | بعد المدة التي تحددها ترويسة Retry-After إن وُجدت |
| خطأ مؤقت في الخادم أو البوابة | 500، 502، 503، 504 | نعم | بتباعد متزايد بين المحاولات وحد أقصى لعددها |
| انقطاع الاتصال أو انتهاء المهلة دون رد | لا رمز | نعم، بشرط منع التكرار | لا تعرف هل وصل الطلب أم لا؛ هنا تظهر أهمية القسم التالي |
المعيار RFC 6585 يعرّف الرمز 429 بأنه إرسال طلبات كثيرة خلال مدة معينة، وينص على أن الاستجابة يجوز أن تتضمن ترويسة Retry-After تحدد مدة الانتظار قبل طلب جديد. الواجهة الجيدة تستعملها، والعميل الجيد يحترمها.
التكرار: السؤال الذي يكشف نضج الواجهة
الصف الأخير في الجدول أعلاه هو أصعب حالة: أرسل الربط المستند، وانقطع الاتصال قبل أن يصل الرد. هل حُفظ المستند أم لا؟ إن أعاد الربط الإرسال والمستند محفوظ فعلًا، فستحصل على نسختين. إن لم يُعِد والمستند غير محفوظ، فقدته.
يعرّف المعيار RFC 9110 الطريقة «متساوية الأثر» (idempotent) بأنها التي يكون أثر تكرار الطلب نفسه على الخادم مثل أثر إرساله مرة واحدة، ويعدّ منها GET وPUT وDELETE، بينما POST ليست كذلك. ولأن إنشاء مستند جديد يتم غالبًا بطلب POST، تحتاج الواجهة آلية إضافية لمنع التكرار. الآليات الشائعة:
مفتاح عمل فريد
يرسل الربط معرّفًا من النظام المصدر (رقم الفاتورة مع رمز الشركة مثلًا) ويرفض الأرشيف إنشاء مستند ثانٍ بالمفتاح نفسه لنوع المستند نفسه، أو يعيد المستند الموجود. بسيط وواضح، ويعتمد على جودة المفتاح.
مفتاح تكرار لكل طلب
يولّد الربط معرّفًا فريدًا لكل عملية إنشاء ويرسله مع الطلب، فيعيد الخادم النتيجة نفسها إن استلم المفتاح مرة أخرى. توجد مسودة في IETF لترويسة Idempotency-Key لهذا الغرض، لكنها ما زالت مسودة منتهية الصلاحية لا معيارًا معتمدًا، فالتطبيق يختلف بين الواجهات.
تحقق قبل الإنشاء
يبحث الربط عن المستند أولًا ثم ينشئه إن لم يجده. أضعف الثلاثة: طلبان متزامنان قد لا يجد أي منهما الآخر فينشئان نسختين. مقبول لأحجام صغيرة فقط.
اسأل المورد صراحة: أي هذه الآليات تدعمها الواجهة؟ وأرني ذلك في بيئة الاختبار. الجواب «النظام لا يسمح بالتكرار» دون شرح الآلية ليس جوابًا.
حدود الاستخدام: موثقة ومعلنة ومنفصلة للترحيل
كل واجهة لها حدود، سواء وُثقت أم لا. المهم أن تكون معروفة قبل التشغيل. مثال على توثيق جيد من منصة أخرى: توثيق Microsoft لحدود حماية الخدمة في Dataverse يذكر الحدود الافتراضية بالأرقام، وأنها تُقاس في نافذة متحركة مدتها خمس دقائق، وأن تجاوزها في Web API يعيد 429 مع Retry-After بعدد الثواني، وينبه إلى أن الأرقام قابلة للتغيير. هذا مستوى الوضوح الذي تطلبه من أي مورد.
ما تسأل عنه تحديدًا:
- ما الحدود: عدد الطلبات في مدة زمنية، أم حجم البيانات، أم الطلبات المتزامنة، أم كلها؟ وهل تختلف بين الاستضافة السحابية المشتركة والخاصة وخوادم الجهة؟
- هل الحد لكل حساب تقني أم للمؤسسة كلها؟ إن كان للمؤسسة، فربط ERP قد يؤثر على ربط CRM.
- هل يوجد مسار أو إعداد مختلف للترحيل الأولي والأحجام الكبيرة، أم يمر الترحيل عبر الواجهة نفسها بالحدود نفسها؟
- كيف تُعلَن الحدود في الاستجابة: رمز 429 وترويسة Retry-After، أم شيء آخر؟
قائمة اختبارات التقييم
نفّذ هذه الاختبارات على بيئة تجريبية يوفرها المورد، بحساب تقني مخصص، وسجّل النتيجة لكل منها. الأولوية «حرجة» تعني أن الفشل فيها يجب أن يُعالج قبل القبول.
| # | الاختبار | طريقة التنفيذ | النتيجة المتوقعة | الأولوية |
|---|---|---|---|---|
| 1 | طلب بحقل إلزامي ناقص | إرسال مستند فاتورة دون رقم الفاتورة | رمز 4xx وجسم خطأ يحدد الحقل | عالية |
| 2 | نوع ملف غير مسموح | إرسال ملف تنفيذي | رفض برمز 4xx ورسالة واضحة | عالية |
| 3 | رمز دخول منتهٍ | استعمال رمز انتهت صلاحيته | 401، ثم نجاح بعد التجديد | عالية |
| 4 | حساب بلا صلاحية على المجلد | إرسال مستند إلى مجلد لا يملك الحساب صلاحيته | 403، ولا يُنشأ شيء | حرجة |
| 5 | إعادة إرسال المستند نفسه | إرسال الطلب نفسه مرتين متتاليتين | مستند واحد في الأرشيف وفق آلية منع التكرار المتفق عليها | حرجة |
| 6 | إرسال متزامن للمستند نفسه | طلبان بالمفتاح نفسه في اللحظة نفسها | مستند واحد | حرجة |
| 7 | انقطاع بعد الإرسال وقبل الرد | قطع الاتصال من جهة العميل بعد إرسال الجسم، ثم إعادة الإرسال | مستند واحد، والرد الثاني يدل على المستند الموجود | حرجة |
| 8 | تجاوز حد الاستخدام | إرسال دفعة كبيرة بتوازٍ مرتفع | 429 مع مدة انتظار، ثم نجاح بعدها، دون فقد أي مستند | عالية |
| 9 | ملف كبير | إرسال ملف بحجم أكبر مستند متوقع لديكم | نجاح، أو رفض واضح بحد موثق | متوسطة |
| 10 | أسماء وحقول عربية | اسم ملف وحقول بالعربية مع أرقام هندية وعربية | تُحفظ دون تشوه ويُبحث بها | عالية |
| 11 | تحديث حقل بعد الإنشاء | تعديل حالة المستند من النظام المصدر | تحديث الحقل دون إنشاء مستند جديد، وظهوره في سجل التغيير | متوسطة |
| 12 | أثر العمليات في سجل التدقيق | مراجعة السجل بعد الاختبارات | كل عملية مسجلة باسم الحساب التقني ووقتها | حرجة |
مثال: دفعة فواتير ليلية
الافتراضات: شركة توزيع ترسل من نظامها المالي كل ليلة الفواتير المرحّلة في اليوم إلى الأرشيف، ومتوسطها ثلاثة آلاف فاتورة. الربط يستعمل رقم الفاتورة مع رمز الشركة مفتاحًا فريدًا. حد الاستخدام المتفق عليه لا يُعرف رقمه مسبقًا، والواجهة تعلن تجاوزه برمز 429 وترويسة Retry-After.
- يبدأ الربط بإرسال الفواتير بتوازٍ محدود. عند الفاتورة رقم 1,800 تقريبًا يصل 429 مع مدة انتظار؛ ينتظر الربط المدة ويستأنف.
- عند الفاتورة رقم 2,400 ينقطع الاتصال بعد إرسال الطلب ودون رد. يعيد الربط الإرسال بالمفتاح نفسه، فيرد الأرشيف بأن المستند موجود، فيسجله الربط ناجحًا ويكمل.
- ثلاث فواتير يُرفض إرسالها بخطأ 4xx لأن حقل المورد فارغ. لا تُعاد؛ تُسجَّل في قائمة استثناءات تصل صباحًا لمحاسب محدد ليصححها في المصدر.
- صباحًا يعرض تقرير الربط: 2,997 مرسلة، 3 استثناءات بأسبابها، 0 مكررة. ويطابق عدد الفواتير في الأرشيف لذلك اليوم عدد المرسلة.
لاحظ أن كل خطوة هنا تعتمد على سلوك في الواجهة يمكن اختباره مسبقًا بالاختبارات 1 و5 و7 و8. لو لم تُختبر، لكانت الخطوة الثانية نسخة مكررة لا يكتشفها أحد إلا عند المراجعة.
الحد الأدنى من أمان الواجهة
التقييم هنا ليس مراجعة أمنية كاملة، لكن أربعة أسئلة لا تُترك:
- المصادقة: بأي آلية؟ وهل للرموز صلاحية زمنية؟ وكيف تُجدد أو تُلغى؟
- الحساب التقني: هل يمكن تقييده بمجلدات وأنواع مستندات بعينها بدل صلاحية شاملة؟
- النقل: هل الاتصال مشفر دائمًا؟ يتيح وثيقة التشفير أثناء النقل بـ TLS 1.3 وأثناء التخزين بـ AES-256.
- الأثر: هل تظهر كل عملية عبر الواجهة في سجل التدقيق كما تظهر عمليات المستخدمين؟
للمراجعة الأمنية الأوسع للمورد، راجع استبيان الأمن التقني الذي يُرسل إلى موردي أنظمة الأرشفة.
أسئلة تطلب إجاباتها مكتوبة في العرض الفني
- هل التوثيق متاح قبل التعاقد، ويتضمن أمثلة للأخطاء لا للنجاح فقط؟
- ما بنية جسم الخطأ، وهل هي ثابتة في كل نقاط الواجهة؟
- ما آلية منع إنشاء المستند مرتين عند إعادة الإرسال؟
- ما حدود الاستخدام، وكيف تُعلن عند تجاوزها، وهل تختلف بحسب نموذج الاستضافة؟
- هل توجد بيئة تجريبية منفصلة عن الإنتاج لتنفيذ الاختبارات؟
- كيف تُدار إصدارات الواجهة، وكم يُبلَّغ العميل مسبقًا قبل تغيير يكسر التوافق؟
واجهة وثيقة في هذا الإطار
يوفر وثيقة REST API للتوصيل مع الأنظمة المؤسسية التي لا يتكامل معها مباشرة، مثل Odoo وMicrosoft Dynamics وأنظمة الموارد البشرية وCRM، وكذلك ربط مزود التوقيع الإلكتروني المعتمد لدى الجهة بالتوقيع الذي يدعمه وثيقة ضمن مسار الاعتماد. ويتكامل مباشرة مع Microsoft 365 وSAP ERP وOracle والبريد الإلكتروني وActive Directory/LDAP. وكل عملية تُسجَّل في سجل تدقيق محمي بالتجزئة وقابل للتصدير. أما آلية منع التكرار وبنية الأخطاء وحدود الاستخدام لبيئتك فتُطلب مكتوبة في العرض الفني وتُختبر بالقائمة أعلاه؛ واطلب ذلك في العرض التوضيحي أو في تجربة إثبات المفهوم.
وتجد تفصيل التكاملات المباشرة والربط عبر REST API في صفحة مستقلة. وإن كنت تخطط لتجربة قبل التعاقد، فاقرأ تجربة إثبات المفهوم لنظام الأرشفة: النطاق والبيانات ومعايير النجاح، وأدرج هذه الاختبارات ضمن معايير قبول النظام قبل توقيع محضر الاستلام.
حوّل الاختبارات إلى شرط في العرض
انسخ قائمة الاختبارات الاثني عشر، وأضف إليها ما يخص أنظمتك، وأرفقها بـطلب عرض التكامل. اطلب أن يرد المورد على كل اختبار: مدعوم ويمكن إثباته، أو مدعوم بشروط، أو غير مدعوم. هذا الرد وحده يخبرك عن الواجهة أكثر من أي عرض تسويقي.
المصادر
أرسل متطلبات التكامل للحصول على عرض فني
حدّد النظام المطلوب ربطه، واتجاه البيانات، والحقول، وعدد المعاملات التقريبي؛ لنميّز ما هو تكامل منشور وما يُنفّذ عبر API ضمن نطاق.
- عدد المستخدمين المتوقع والإدارات المشاركة
- حجم الأرشيف الحالي تقريباً (عدد الملفات أو الصفحات أو الحجم بالجيجابايت) ونسبة الورقي منه
- نموذج الاستضافة المفضل: سحابة داخل المملكة أو خوادم الجهة
- النظام الحالي للملفات والأنظمة المطلوب التكامل معها
الهاتف وواتساب: +966 56 533 0501 — الأحد إلى الخميس 9 صباحاً حتى 6 مساءً.