คู่มือสร้าง RESTful API ด้วย NestJS ฉบับนักพัฒนาไทย

สร้าง RESTful API ด้วย NestJS: คู่มือฉบับสมบูรณ์

สร้าง RESTful API ด้วย NestJS: คู่มือฉบับสมบูรณ์

ในโลกของการพัฒนาเว็บสมัยใหม่ RESTful APIs มีบทบาทสำคัญในการเชื่อมต่อแอปพลิเคชันต่างๆ เข้าด้วยกัน NestJS เป็นเฟรมเวิร์ก Node.js ที่ได้รับความนิยมมากขึ้นเรื่อยๆ สำหรับการสร้าง APIs ที่มีโครงสร้างและบำรุงรักษาได้ง่าย ในบทความนี้ เราจะสำรวจวิธีการสร้าง RESTful API ด้วย NestJS ตั้งแต่เริ่มต้นจนถึงการนำไปใช้งานจริง

NestJS คืออะไร?

NestJS เป็นเฟรมเวิร์ก Node.js ที่สร้างขึ้นบน TypeScript ซึ่งได้รับแรงบันดาลใจจาก Angular และ Spring Boot มันมอบสถาปัตยกรรมที่แข็งแกร่งสำหรับการสร้างแอปพลิเคชันฝั่งเซิร์ฟเวอร์ที่มีประสิทธิภาพและปรับขนาดได้ NestJS เน้นการใช้งาน Dependency Injection, Modules และ Decorators เพื่อให้โค้ดของคุณเป็นระเบียบและง่ายต่อการทดสอบ

ข้อดีของการใช้ NestJS สำหรับ RESTful APIs

  • โครงสร้างที่ชัดเจน: NestJS บังคับใช้โครงสร้างที่สอดคล้องกัน ทำให้โค้ดของคุณอ่านง่ายและบำรุงรักษาได้
  • TypeScript: การใช้ TypeScript ช่วยให้คุณตรวจจับข้อผิดพลาดได้ตั้งแต่เนิ่นๆ และเพิ่มความน่าเชื่อถือของโค้ด
  • Dependency Injection: ลดความซับซ้อนในการจัดการ dependencies และทำให้โค้ดของคุณทดสอบได้ง่ายขึ้น
  • Modules: จัดระเบียบโค้ดของคุณเป็น modules ที่แยกจากกัน ทำให้ง่ายต่อการนำกลับมาใช้ใหม่
  • Decorators: ลดปริมาณ boilerplate code และทำให้โค้ดของคุณอ่านง่ายขึ้น
  • CLI: NestJS CLI ช่วยให้คุณสร้างโปรเจ็กต์, modules, controllers และ services ได้อย่างรวดเร็ว

เริ่มต้นสร้างโปรเจ็กต์ NestJS

ก่อนอื่น คุณต้องติดตั้ง NestJS CLI (Command Line Interface) โดยใช้ npm หรือ yarn:

npm i -g @nestjs/cli

จากนั้นสร้างโปรเจ็กต์ใหม่:

nest new my-nest-api

NestJS CLI จะสร้างโครงสร้างโปรเจ็กต์พื้นฐานให้คุณ

โครงสร้างโปรเจ็กต์ NestJS

โปรเจ็กต์ NestJS จะมีโครงสร้างดังนี้:

  • src: โฟลเดอร์หลักสำหรับโค้ดของคุณ
  • src/app.module.ts: Module หลักของแอปพลิเคชัน
  • src/app.controller.ts: Controller หลักของแอปพลิเคชัน
  • src/app.service.ts: Service หลักของแอปพลิเคชัน
  • main.ts: ไฟล์เริ่มต้นของแอปพลิเคชัน

สร้าง Controller

Controllers จัดการ HTTP requests และส่ง responses กลับไปยัง client สร้าง controller ใหม่โดยใช้ NestJS CLI:

nest generate controller products

ไฟล์ src/products/products.controller.ts จะถูกสร้างขึ้น แก้ไขไฟล์นี้เพื่อเพิ่ม routes:

import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';@Controller('products')export class ProductsController {    @Get()    getAllProducts() {        return 'This action returns all products';    }    @Get(':id')    getProduct(@Param('id') id: string) {        return `This action returns product with id ${id}`;    }    @Post()    createProduct(@Body() body: any) {        return `This action creates a new product with data: ${JSON.stringify(body)}`;    }    @Put(':id')    updateProduct(@Param('id') id: string, @Body() body: any) {        return `This action updates product with id ${id} and data: ${JSON.stringify(body)}`;    }    @Delete(':id')    deleteProduct(@Param('id') id: string) {        return `This action deletes product with id ${id}`;    }}

Controller นี้กำหนด routes สำหรับการจัดการ products: GET, POST, PUT, DELETE

สร้าง Service

Services มีหน้าที่จัดการ business logic สร้าง service ใหม่โดยใช้ NestJS CLI:

nest generate service products

ไฟล์ src/products/products.service.ts จะถูกสร้างขึ้น แก้ไขไฟล์นี้เพื่อเพิ่ม logic:

import { Injectable } from '@nestjs/common';@Injectable()export class ProductsService {    private products = [        { id: '1', name: 'Product 1' },        { id: '2', name: 'Product 2' },    ];    getAllProducts() {        return this.products;    }    getProduct(id: string) {        return this.products.find(product => product.id === id);    }    createProduct(product: any) {        this.products.push(product);        return product;    }    updateProduct(id: string, product: any) {        const index = this.products.findIndex(product => product.id === id);        if (index !== -1) {            this.products[index] = product;            return product;        }        return null;    }    deleteProduct(id: string) {        this.products = this.products.filter(product => product.id !== id);    }}

Service นี้มี methods สำหรับการจัดการ products: getAllProducts, getProduct, createProduct, updateProduct, deleteProduct

เชื่อมต่อ Controller และ Service

แก้ไข src/products/products.controller.ts เพื่อใช้ ProductsService:

import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';import { ProductsService } from './products.service';@Controller('products')export class ProductsController {    constructor(private readonly productsService: ProductsService) {}    @Get()    getAllProducts() {        return this.productsService.getAllProducts();    }    @Get(':id')    getProduct(@Param('id') id: string) {        return this.productsService.getProduct(id);    }    @Post()    createProduct(@Body() body: any) {        return this.productsService.createProduct(body);    }    @Put(':id')    updateProduct(@Param('id') id: string, @Body() body: any) {        return this.productsService.updateProduct(id, body);    }    @Delete(':id')    deleteProduct(@Param('id') id: string) {        this.productsService.deleteProduct(id);    }}

Controller นี้ใช้ Dependency Injection เพื่อรับ ProductsService และเรียกใช้ methods ต่างๆ

แก้ไข Module

แก้ไข src/app.module.ts เพื่อ import ProductsModule:

import { Module } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';import { ProductsModule } from './products/products.module';@Module({  imports: [ProductsModule],  controllers: [AppController],  providers: [AppService],})export class AppModule {}

ทดสอบ API

รันแอปพลิเคชัน:

npm run start:dev

จากนั้นใช้เครื่องมือเช่น Postman หรือ curl เพื่อทดสอบ API ของคุณ

สรุป

NestJS เป็นเฟรมเวิร์กที่ยอดเยี่ยมสำหรับการสร้าง RESTful APIs ที่มีโครงสร้างและบำรุงรักษาได้ง่าย ด้วยคุณสมบัติเช่น TypeScript, Dependency Injection และ Modules คุณสามารถสร้างแอปพลิเคชันฝั่งเซิร์ฟเวอร์ที่มีประสิทธิภาพและปรับขนาดได้ หากคุณกำลังมองหาผู้เชี่ยวชาญด้านการพัฒนา IT System และ Software Development ในประเทศไทย, ติดต่อ มีศิริ ดิจิทัล เพื่อรับคำปรึกษาและโซลูชันที่ตอบโจทย์ความต้องการของคุณ

มีศิริ ดิจิทัล คือผู้นำด้าน IT consulting, software development, digital transformation, และ business solutions ในประเทศไทย เราพร้อมช่วยคุณพัฒนาระบบ IT และซอฟต์แวร์ที่ตอบโจทย์ธุรกิจของคุณอย่างมีประสิทธิภาพ ติดต่อเรา เพื่อเริ่มต้นการเปลี่ยนแปลงทางดิจิทัลวันนี้!

สร้าง Design System สำหรับทีมพัฒนาไทย