كائنات نقل البيانات والتحقّق
كائنات نقل البيانات والتحقّق
لا تثق أبدًا بالبيانات الواردة. يُعرّف DTO (كائن نقل البيانات) الشكل الدقيق لحمولة الطلب، ويتولّى NestJS — بمساعدة class-validator وclass-transformer — التحقّق منها وتحويلها تلقائيًا قبل أن تصل إلى متحكّمك أصلًا. وهذه من أعلى ميزات الإطار قيمةً.
ما هو DTO؟
الـ DTO صنف بسيط يصف البيانات التي يقبلها المسار. استخدام صنف (لا واجهة) مقصود: الأصناف موجودة وقت التشغيل، فيستطيع NestJS قراءة مُزخرِفات التحقّق فيها.
ربط التحقّق
ثبّت المكتبتين، ثم فعّل ValidationPipe العام مرّة واحدة في main.ts:
الآن استخدم الـ DTO كنوع لـ @Body(). أي طلب يخالف قاعدة يُرفض بـ 400 Bad Request برسالة واضحة — قبل تشغيل معالجك:
مُزخرِفات التحقّق الشائعة
@IsString()و@IsInt()و@IsBoolean()و@IsEmail()و@IsUrl()@MinLength()و@MaxLength()و@Min()و@Max()@IsOptional()— تخطّي التحقّق حين يغيب الحقل@IsEnum()و@IsArray()و@IsDateString()
تقوية ValidationPipe
ثلاثة خيارات تجعل التحقّق أكثر أمانًا بكثير:
isAdmin)، وتُحوّل transform الـ JSON الخام إلى نسخة DTO حقيقية بقيم مكتوبة الأنواع صحيحةً.
الكائنات المتداخلة
للتحقّق من DTOs متداخلة، علّم الخاصيّة بـ @ValidateNested() و@Type() ليعرف المُحوِّل الصنف الذي يبنيه:
الخلاصة
الـ DTOs أصناف تصف بيانات الطلب وتتحقّق منها بمُزخرِفات class-validator. فعّل ValidationPipe العام مع whitelist وforbidNonWhitelisted وtransform لتحقّق وتحويل أنواع آمنين وتلقائيين. تُرفض الطلبات غير الصالحة بـ 400 قبل تشغيل كودك. تاليًا ننظر في الأنابيب — الآليّة التي تشغّل هذا.