zod vs class-validator و class-transformer

Summarize this content to 400 words in Persian Lang
مقایسه zod با class-validator و class-transformer در NestJS
گیج شده بودم یا حداقل کنجکاو بودم zod یا class-validator & class-transformerبه عنوان یک کتابخانه اعتبار سنجی در NestJS.
نقطه اصلی
فقط مستقیم به آن بروید.
1. دلیل انتخاب class-validator & class-transformer
نمایندگی می کند دوتایی بسته های رایج و پرکاربرد در NestJS
روش نوشتن خیلی NestJS چون هست اعتبار سنجی مبتنی بر دکوراتور
ادغام تمیز و بدون درز با استفاده مشترک آنها class-transformer & ValidationPipe
2. دلیل انتخاب zod
چارچوب آگنوستیک
تایپ اسکریپت banget
آن را ارجح تر کنید کاربردی & مبتنی بر طرحواره رویکرد
اعتبارسنجی عملکرد و سبک وزن بسیار مهم است
جزئیات
class-validator & class-transformer در واقع، 2 بسته وجود دارد که بیشتر به عنوان اعتبار سنجی در NestJS استفاده می شود،بله، جدا از این که روش نوشتن همان چیزی است که NestJS استفاده می کند مبتنی بر دکوراتور،همچنین به این دلیل که تمیز و بدون درز است زیرا می توان از آن با هم استفاده کرد Validation Pipe به عنوان DTO.
بنابراین دادههای دریافتی/بار دریافتی توسط کنترلکننده اعتبارسنجی و مطابق با تعریف آن تغییر/تغییر داده شده است.در حالی که zod هنوز باید به صورت دستی داده ها/بار دریافتی را تأیید کند،بله، شاید فقط 1 یا حداکثر 3 خط،اما البته هر چه توابع اعتبارسنجی بیشتر مورد نیاز باشد، فرآیندهای دستی بیشتری مورد نیاز است.
جزئیات رویه
در زیر روش های دقیق (ممکن است ذهنی) برای مقایسه
class-validator & class-transformer
1. نصب و راه اندازی
npm install class-validator class-transformer
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
2. اعتبار سنجی جهانی را فعال کنید
// main.ts
….
import { ValidationPipe } from ‘@nestjs/common’;
async function bootstrap() {
….
// Enable validation globally
app.useGlobalPipes(new ValidationPipe({
transform: true, // Automatically transform payloads to DTO instances
whitelist: true, // Strip unknown properties
forbidNonWhitelisted: true, // Throw error for unknown properties
}));
….
}
….
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
3. تعریف DTO (Data Transfer Object)
import { IsNotEmpty, IsString, IsInt, Min } from “class-validator”;
import { Type, Transform } from “class-transformer”;
export class CreateUserDto {
@Transform(({ value }) => value.trim()) // Trim whitespaces
@IsNotEmpty({ message: “Nama tidak boleh kosong” })
@IsString({ message: “Nama harus berupa string” })
@Min(3, { message: “Minimal panjang nama 3 karakter” })
name: string;
@Type(() => Number) // Transform input ke tipe Number
@IsNotEmpty({ message: “Nama tidak boleh kosong” })
@IsInt({ message: “Umur harus berupa bilangan bulat” })
@Min(17, { message: “Minimal umur terdaftar 17 tahun” })
age: number;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خیلی طولانی است، بله، اما همین مبتنی بر دکوراتور.
4. استفاده از اعتبارسنجی
import { Body, Controller, Post } from “@nestjs/common”;
import { CreateUserDto } from “./create-user.dto”;
@Controller(“users”)
export class UsersController {
@Post()
create(@Body() createUserDto: CreateUserDto) {
// Pada titik ini data/payload createUserdDto
// sudah tervalidasi & diubah sesuai definisinya
// developer bisa langsung eksekusi service
// atau logic yang lain
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
zod
1. نصب و راه اندازی
npm install zod
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
2. طرحواره اعتبار سنجی را ایجاد کنید
// user.validaiton.ts
import { z, ZodType } from “zod”;
export class UserValidation {
static readonly CREATE: ZodType = z.object({
name: z
.string({ message: “Nama harus berupa string” })
.nonempty({ message: “Nama tidak boleh kosong” })
.min(3, “Minimal panjang nama 13 karakter”),
age: z
.number({ message: “Umur harus berupa angka” })
.int({ message: “Umur harus berupa bilangan bulat” })
.min(17, “Minimal umur terdaftar 17 tahub”),
});
}
export type TCreateUserPayload = z.infer<typeof UserValidation.CREATE>;
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
*شخصی: خواندن این طرحواره را در مقایسه با طرح بالا ترجیح می دهم
3. استفاده از اعتبارسنجی
import { Body, Controller, Post } from “@nestjs/common”;
import { UserValidation, TCreateUserPayload } from “./user.validation.ts”;
@Controller(“users”)
export class UsersController {
@Post()
create(@Body() createUserPayload: TCreateUserPayload) {
const payload = UserValidation.CREATE.parse(createUserPayload);
// Pada titik ini data/payload payload
// sudah tervalidasi & diubah sesuai definisinya
// developer bisa langsung eksekusi service
// atau logic yang lain
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نتیجه گیری
من شخصاً این روش استفاده را ترجیح می دهم zod.با این حال آنچه باید بر آن تاکید شود این است با توجه به نیازها و استانداردهای تیم انتخاب کنید.
https://abdulghofurme.github.io/posts/zod-vs-class-validator-n-class-transformer/
مقایسه zod با class-validator و class-transformer در NestJS
گیج شده بودم یا حداقل کنجکاو بودم zod
یا class-validator
& class-transformer
به عنوان یک کتابخانه اعتبار سنجی در NestJS.
نقطه اصلی
فقط مستقیم به آن بروید.
1. دلیل انتخاب class-validator
& class-transformer
- نمایندگی می کند دوتایی بسته های رایج و پرکاربرد در NestJS
- روش نوشتن خیلی NestJS چون هست اعتبار سنجی مبتنی بر دکوراتور
- ادغام تمیز و بدون درز با استفاده مشترک آنها
class-transformer
&ValidationPipe
2. دلیل انتخاب zod
- چارچوب آگنوستیک
- تایپ اسکریپت banget
- آن را ارجح تر کنید کاربردی & مبتنی بر طرحواره رویکرد
- اعتبارسنجی عملکرد و سبک وزن بسیار مهم است
جزئیات
class-validator
& class-transformer
در واقع، 2 بسته وجود دارد که بیشتر به عنوان اعتبار سنجی در NestJS استفاده می شود،
بله، جدا از این که روش نوشتن همان چیزی است که NestJS استفاده می کند مبتنی بر دکوراتور،
همچنین به این دلیل که تمیز و بدون درز است زیرا می توان از آن با هم استفاده کرد Validation Pipe به عنوان DTO.
بنابراین دادههای دریافتی/بار دریافتی توسط کنترلکننده اعتبارسنجی و مطابق با تعریف آن تغییر/تغییر داده شده است.
در حالی که zod
هنوز باید به صورت دستی داده ها/بار دریافتی را تأیید کند،
بله، شاید فقط 1 یا حداکثر 3 خط،
اما البته هر چه توابع اعتبارسنجی بیشتر مورد نیاز باشد، فرآیندهای دستی بیشتری مورد نیاز است.
جزئیات رویه
در زیر روش های دقیق (ممکن است ذهنی) برای مقایسه
class-validator
& class-transformer
1. نصب و راه اندازی
npm install class-validator class-transformer
2. اعتبار سنجی جهانی را فعال کنید
// main.ts
....
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
....
// Enable validation globally
app.useGlobalPipes(new ValidationPipe({
transform: true, // Automatically transform payloads to DTO instances
whitelist: true, // Strip unknown properties
forbidNonWhitelisted: true, // Throw error for unknown properties
}));
....
}
....
3. تعریف DTO (Data Transfer Object)
import { IsNotEmpty, IsString, IsInt, Min } from "class-validator";
import { Type, Transform } from "class-transformer";
export class CreateUserDto {
@Transform(({ value }) => value.trim()) // Trim whitespaces
@IsNotEmpty({ message: "Nama tidak boleh kosong" })
@IsString({ message: "Nama harus berupa string" })
@Min(3, { message: "Minimal panjang nama 3 karakter" })
name: string;
@Type(() => Number) // Transform input ke tipe Number
@IsNotEmpty({ message: "Nama tidak boleh kosong" })
@IsInt({ message: "Umur harus berupa bilangan bulat" })
@Min(17, { message: "Minimal umur terdaftar 17 tahun" })
age: number;
}
خیلی طولانی است، بله، اما همین مبتنی بر دکوراتور.
4. استفاده از اعتبارسنجی
import { Body, Controller, Post } from "@nestjs/common";
import { CreateUserDto } from "./create-user.dto";
@Controller("users")
export class UsersController {
@Post()
create(@Body() createUserDto: CreateUserDto) {
// Pada titik ini data/payload createUserdDto
// sudah tervalidasi & diubah sesuai definisinya
// developer bisa langsung eksekusi service
// atau logic yang lain
}
}
zod
1. نصب و راه اندازی
npm install zod
2. طرحواره اعتبار سنجی را ایجاد کنید
// user.validaiton.ts
import { z, ZodType } from "zod";
export class UserValidation {
static readonly CREATE: ZodType = z.object({
name: z
.string({ message: "Nama harus berupa string" })
.nonempty({ message: "Nama tidak boleh kosong" })
.min(3, "Minimal panjang nama 13 karakter"),
age: z
.number({ message: "Umur harus berupa angka" })
.int({ message: "Umur harus berupa bilangan bulat" })
.min(17, "Minimal umur terdaftar 17 tahub"),
});
}
export type TCreateUserPayload = z.infer<typeof UserValidation.CREATE>;
*شخصی: خواندن این طرحواره را در مقایسه با طرح بالا ترجیح می دهم
3. استفاده از اعتبارسنجی
import { Body, Controller, Post } from "@nestjs/common";
import { UserValidation, TCreateUserPayload } from "./user.validation.ts";
@Controller("users")
export class UsersController {
@Post()
create(@Body() createUserPayload: TCreateUserPayload) {
const payload = UserValidation.CREATE.parse(createUserPayload);
// Pada titik ini data/payload payload
// sudah tervalidasi & diubah sesuai definisinya
// developer bisa langsung eksekusi service
// atau logic yang lain
}
}
نتیجه گیری
من شخصاً این روش استفاده را ترجیح می دهم zod
.
با این حال آنچه باید بر آن تاکید شود این است با توجه به نیازها و استانداردهای تیم انتخاب کنید.
https://abdulghofurme.github.io/posts/zod-vs-class-validator-n-class-transformer/