تخطَّ إلى المحتوى

التعامل مع الأخطاء في سير عمل NextPDF Connect

ابنِ سير عمل ⁨Connect⁩ مرنًا في مواجهة الأخطاء. تحقّق من صحة كل نتيجة أداة، وأغلق الجلسة التي فشلت، ثم أعد المحاولة من حالة جديدة. يُرجِع استدعاء الأداة الفاشل نتيجة خطأ مُنظَّمة. تعامل مع تلك النتيجة بوصفها استجابة عادية، لا فشلًا في النقل. يقرّر معيار ⁨PHP Standards Recommendation⁩ (⁨PSR⁩)-18 التمييز نفسه: تُرجَع استجابة حتى عندما تشير الحالة إلى خطأ (⁨PSR-18⁩ §3).

Terminal window
composer require nextpdf/server

اربط وسيلة نقل. تستخدم هذه الوصفة create_pdf وadd_text وoutput_pdf. تتوفر الأدوات الثلاث كلها ضمن الإصدار الأساسي (⁨Core⁩).

يُرجِع استدعاء الأداة الفاشل نتيجة خطأ. تحمل النتيجة علامة خطأ، ورسالة قابلة للقراءة البشرية، ورمزًا عند الاقتضاء. أما النتيجة الناجحة فلا تحمل علامة خطأ، بل تحمل المخرجات العادية للأداة. في كلتا الحالتين، تكون وسيلة النقل قد أرسلت الطلب وتلقّت الاستجابة (⁨PSR-18⁩ §⁨p2⁩).

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

الأداةالدورفئة المخاطر
create_pdfفتح الجلسةآمنة
add_textكتابة نصتنبيه
output_pdfتصيير ملف ⁨PDF⁩ وإرجاعهموافقة مطلوبة / مراجعة (⁨base64⁩)

كتالوج الأدوات هو المرجع الموثوق. وتعتمد الأدوات المتاحة على الإصدار المثبَّت.

شغّل مسار النجاح (create_pdfadd_textoutput_pdf) وتحقّق من كل نتيجة. ثم تعمّد إعادة استخدام document_id تالفًا في add_text لتوليد خطأ في الجلسة. تعافَ من ذلك بإنشاء جلسة جديدة وإعادة تطبيق المحتوى.

صنّف الأخطاء إلى فئات، ثم استجِب وفقًا لذلك:

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

لا تفترض النجاح أبدًا. لا تُعِد أبدًا استخدام document_id بعد خطأ جلسة. لا ترسل أبدًا output_pdf حتى تنجح كل خطوة من خطوات المحتوى.

  • الموافقة ليست خطأ. تحدي التدخل البشري في الحلقة (⁨HITL⁩) هو توقّف مؤقت. لا تُعِد المحاولة في حلقة ضيقة. مرّره إلى المراجع البشري.
  • إعادة تشغيل الخادم. تُمحى كل الجلسات الموجودة في الذاكرة، ويصبح كل document_id سابقًا غير صالح.
  • سير عمل جزئي. إذا فشل add_text في منتصف المستند، فقد تكون الجلسة غير متسقة. التعافي الآمن هو جلسة جديدة، لا إصلاح جزئي.

الأثر ضئيل. تتناول هذه الوصفة تدفق التحكم، لا العرض. وتكون السمة structural لأي مخرجات مُنتَجة.

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

العبارةالمواصفةالبند⁨reference_id⁩
يُرجِع النقل استجابة بغض النظر عن النتيجة.⁨PSR-18⁩§⁨p2⁩
تُرجَع استجابة حتى عند حالة خطأ.⁨PSR-18⁩§3

لا ينطبق — الأدوات جميعها ضمن الإصدار الأساسي (⁨Core⁩).

النقلمتاحملاحظات
⁨MCP⁩ (⁨stdio⁩)نعمترد الأخطاء في صورة نتيجة أداة تحمل علامة خطأ.
⁨REST⁩نعمتحمل الاستجابة ذات الحالة غير 2⁨xx⁩ متن الخطأ المصنَّف نفسه.
⁨gRPC⁩نعمرمز حالة مع رسالة نتيجة خطأ.

في كل وسيلة نقل، افحص خطأ مستوى الأداة بوصفه استجابة عادية، لا استدعاءً مُسقَطًا (⁨PSR-18⁩ §3).

create_pdf آمنة، وadd_text تنبيه، وoutput_pdf موافقة مطلوبة، تُخفَّض إلى مراجعة في وضع ⁨base64⁩. تظهر عملية كتابة الملف المعلّقة في صورة تحدي موافقة. يجب أن تتعامل معه حلقة الأخطاء كتوقّف مؤقت، لا كفشل (فئات مخاطر ⁨HITL⁩).

تُرجِع الموافقة المعلّقة ما يلي:

{ "allowed": false, "challenge": "<human-readable challenge text>", "token": "confirm_<single-use-hex>" }

أعد استدعاء الأداة نفسها مع تعيين _confirmation_token إلى ذلك الرمز. تُرجِع { "allowed": true }. للاطلاع على التدفق الكامل، راجع ⁨output-approval⁩.