NestJS — Node.js للمؤسسات

خط الخدمات المصغرة: المرشحات والأنابيب والحراس والمعترضات

18 دقيقة الدرس 69 من 80

خط الخدمات المصغرة: المرشحات والأنابيب والحراس والمعترضات

لا تزال معالجات الخدمات المصغرة تحتاج تحققاً وتفويضاً وتعيين أخطاء وتتبعاً. يسمح NestJS باستخدام الأنابيب والحراس والمعترضات ومرشحات الاستثناءات في سياقات RPC، لكن نموذج الاستجابة يختلف عن HTTP.

الفكرة الأساسية

تدور هذه الميزة حول التحكم في كيفية تنظيم التطبيق وسلوكه وقت التشغيل. النقاط التالية هي ما يجب أن يعرفه المطور قبل استخدامها في مشروع حقيقي:

  • تتحقق الأنابيب وتحول حمولات الرسائل قبل تشغيل معالجات @MessagePattern.
  • تستطيع الحراس تفويض الرسائل بناءً على بيانات الحمولة أو الرؤوس أو سياق الوسيط.
  • تغلف المعترضات تنفيذ المعالج وتفيد للتتبع والتوقيت وتعيين الاستجابة.
  • تنقل RpcException أخطاء منظمة عبر طبقة الخدمات المصغرة.
  • يجب أن ترسل مرشحات الخدمات المصغرة حمولات أخطاء مناسبة للوسيلة لا استجابات HTTP.

مثال عملي

يوضح المثال التالي الشكل العملي للفكرة داخل مشروع NestJS. ليست الغاية حفظ الكود، بل فهم مكانه في المعمارية:

@UseFilters(new RpcValidationFilter()) @Controller() export class BillingMessageController { @MessagePattern({ cmd: 'invoice.create' }) @UseGuards(ServiceTokenGuard) @UsePipes(new ValidationPipe({ transform: true })) createInvoice(@Payload() dto: CreateInvoiceMessage) { return this.billingService.createInvoice(dto); } } throw new RpcException({ code: 'CUSTOMER_NOT_FOUND', message: 'Customer does not exist' });
ملاحظة تصميمية: ينبغي أن يكون خط الخدمات المصغرة مقصوداً مثل خط HTTP تماماً. الاختلاف الوحيد هو عقد وسيلة النقل: رسالة داخلة، واستجابة أو حدث خارج، بلا رمز حالة متصفح.

قائمة تطبيق إنتاجية

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

الخلاصة

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