برنامه نویسی

🚀 Building Toy: REST API در NestJS

هی همه! 👋

🤔 تا به حال به این فکر کرده اید که چگونه می توان برنامه های کاربردی باطن را شروع کرد؟ بیایید با NestJS و Node.js اولین برنامه کاری خود را ایجاد کنیم!

چه در زمینه توسعه Backend تازه کار باشید یا فقط مهارت های خود را تقویت کنید، این راهنما برای شما عالی است. ما با یک برنامه اصلی To-Do شروع می کنیم و حتی Swagger را برای مستندات API زنده ادغام می کنیم. 📝

🔧 آنچه یاد خواهید گرفت:

  • با استفاده از NestJS یک برنامه To-Do اصلی راه اندازی کنید.
  • Swagger را برای ایجاد اسناد API تعاملی ادغام کنید.
  • اصول اولیه فریمورک های Node.js و NestJS را بدانید.

💡 چرا اپلیکیشن Toy To-Do بسازیم؟
این یک تمرین فوق العاده برای مبتدیانی است که قصد دارند در مورد توسعه backend یاد بگیرند. به علاوه، ادغام Swagger برنامه شما را با اسناد API تعاملی که می‌تواند مستقیماً از مرورگر شما آزمایش شود، بهبود می‌بخشد.

شروع شدن

نصب Node.js v20.9.0

مطمئن شوید که آخرین نسخه LTS Node.js را با استفاده از nvm نصب کرده اید:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 20.9.0
nvm use 20.9.0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

راه اندازی پروژه NestJS

NestJS CLI را نصب کنید:

   npm i -g @nestjs/cli
   nest new todo-app
   cd todo-app
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد یک ماژول برای انجام:

   nest generate module todos
   nest generate service todos
   nest generate controller todos
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستورات ساختار اصلی را برای مدیریت موارد To-Do تنظیم می کند.

ساخت اپلیکیشن

مرحله 1: مدل To-Do را تعریف کنید

ایجاد یک todo.model.ts در src/todos پوشه:

export class Todo {
  id: string;
  title: string;
  description?: string;
  isCompleted: boolean;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: یک DTO ایجاد کنید

ساختار ایجاد موارد جدید To-Do را با آن تعریف کنید create-todo.dto.ts:

export class CreateTodoDto {
  title: string;
  description?: string;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: اجرای سرویس

خدمات در NestJS منطق کسب و کار را مدیریت می کند. در اینجا نحوه راه اندازی شما آمده است todos.service.ts:

import { Injectable } from '@nestjs/common';
import { Todo } from './todo.model';
import { CreateTodoDto } from './create-todo.dto';
import { v4 as uuidv4 } from 'uuid';

@Injectable()
export class TodosService {
  private todos: Todo[] = [];

  findAll(): Todo[] {
    return this.todos;
  }

  findOne(id: string): Todo {
    return this.todos.find(todo => todo.id === id);
  }

  create(createTodoDto: CreateTodoDto): Todo {
    const todo: Todo = {
      id: uuidv4(),
      isCompleted: false,
      ...createTodoDto
    };
    this.todos.push(todo);
    return todo;
  }

  update(id: string, updateTodoDto: CreateTodoDto): Todo {
    const todo = this.findOne(id);
    if (!todo) {
      return null;
    }
    this.todos = this.todos.map(t => t.id === id ? { ...t, ...updateTodoDto } : t);
    return this.findOne(id);
  }

  delete(id: string): boolean {
    this.todos = this.todos.filter(todo => todo.id !== id);
    return this.todos.length < initiallyLength;
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: کنترلر را پیاده سازی کنید

کنترل‌کننده‌ها درخواست‌های HTTP ورودی را مدیریت می‌کنند:

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { TodosService } from './todos.service';
import { Todo } from './todo.model';
import { CreateTodoDto } from './create-todo.dto';

@Controller('todos')
export class TodosController {
  constructor(private readonly todosService: TodosService) {}

  @Get()
  findAll(): Todo[] {
    return this.todosService.findAll();
  }

  @Post()
  create(@Body() createTodoDto: CreateTodoDto): Todo {
    return this.todosService.create(createTodoDto);
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

افزودن اسناد Swagger

ادغام Swagger در NestJS به لطف وجود ساده است @nestjs/swagger مدول:

ماژول Swagger را نصب کنید:

   npm install @nestjs/swagger swagger-ui-express
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Swagger را در فایل برنامه اصلی خود راه اندازی کنید (main.ts):

   import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
   import { AppModule } from './app.module';
   import { NestFactory } from '@nestjs/core';

   async function bootstrap() {
     const app = await NestFactory.create(AppModule);
     const config = new DocumentBuilder()
       .setTitle('To-Do API')
       .setDescription('The To-Do API description')
       .setVersion('1.0')
       .build();
     const document = SwaggerModule.createDocument(app, config);
     SwaggerModule.setup('api', app, document);

     await app.listen(3000);
   }
   bootstrap();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجرای برنامه

npm run start:dev
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بازدید کنید http://localhost:3000/api برای مشاهده اسناد Swagger API تعاملی خود، جایی که می توانید نقاط پایانی API خود را نیز آزمایش کنید.

اضافه کردن حاشیه نویسی Swagger

مرحله 5: حاشیه نویسی Swagger را به مدل To-Do اضافه کنید

مدل داده خود را با حاشیه نویسی Swagger تقویت کنید. a را اصلاح کنید todo.model.ts:

import { ApiProperty } from '@nestjs/swagger';

export class Todo {
  @ApiProperty({ example: '1', description: 'Unique identifier of the todo' })
  id: string;

  @ApiProperty({ example: 'Buy groceries', description: 'Title of the todo' })
  title: string;

  @ApiProperty({ example: 'Remember to buy milk and eggs', description: 'Detailed description of the todo', required: false })
  description?: string;

  @ApiProperty({ example: false, description: 'Completion status of the todo' })
  isCompleted: boolean;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 6: حاشیه نویسی Swagger را به DTO اضافه کنید

را CreateTodoDto همچنین از حاشیه نویسی Swagger سود می برد:

import { ApiProperty } from '@nestjs/swagger';

export class CreateTodoDto {
  @ApiProperty({ example: 'Buy groceries', description: 'Title of the todo' })
  title: string;

  @ApiProperty({ example: 'Remember to buy milk and eggs', description: 'Detailed description of the todo', required: false })
  description?: string;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 7: حاشیه نویسی Swagger را به Controller اضافه کنید

اکنون کنترلرها از Swagger برای مستندسازی مسیرهای API استفاده می کنند:

import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
import { TodosService } from './todos.service';
import { Todo } from './todo.model';
import { CreateTodoDto } from './create-todo.dto';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';

@ApiTags('todos')
@Controller('todos')
export class TodosController {
  constructor(private readonly todosService: TodosService) {}

  @Get()
  @ApiOperation({ summary: 'Retrieve all todos' })
  @ApiResponse({ status: 200, description: 'List of todo items', type: [Todo] })
  findAll(): Todo[] {
    return this.todosService.findAll();
  }

  @Post()
  @ApiOperation({ summary: 'Create a new todo' })
  @ApiResponse({ status: 201, description: 'The created todo', type: Todo })
  create(@Body() createTodoDto: CreateTodoDto): Todo {
    return this.todosService.create(createTodoDto);
  }

  // Continue with other methods using similar Swagger annotations
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجرای مجدد برنامه (در صورت توقف)

npm run start:dev
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بازدید کنید http://localhost:3000/api برای مشاهده اسناد Swagger API تعاملی خود با توضیحات مدل‌ها.

کد نویسی مبارک 🚀


یادداشت های سریع در مورد Swagger

فحش دادن اغلب در کنار مشخصات OpenAPI، اما درک تمایز و ارتباط بین آنها مهم است. فحش دادن، در ابتدا ترکیبی از ابزارها برای طراحی و مستندسازی RESTful APIها، تکامل یافته است تا ارتباط نزدیکی با مشخصات OpenAPI داشته باشد.

دسته بندی شرح
Swagger Tools Swagger در ابتدا شامل ابزارهایی مانند Swagger UI، Swagger Editor و Swagger Codegen برای طراحی، مستندسازی و مصرف RESTful APIها بود.
مشخصات OpenAPI در ابتدا به عنوان Swagger Specification شناخته می‌شد، این یک قالب استاندارد برای توصیف APIهای RESTful است که تعاملات API استاندارد شده را تسهیل می‌کند.
ارتباط در سال 2015، Swagger Specification توسط SmartBear Software به OpenAPI Initiative اهدا شد و به OpenAPI Specification تغییر نام داد، در حالی که ابزار Swagger همچنان از آن پشتیبانی می کرد.
استفاده امروزه، “Swagger” اغلب به مجموعه ابزارهایی اشاره می کند که از مشخصات OpenAPI پشتیبانی می کنند، که به توسعه دهندگان اجازه می دهد تا API ها را بدون دسترسی مستقیم به پیاده سازی آنها تجسم و تعامل کنند.

🔥 اگر از این کار لذت بردید، «آتش» را بزنید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا