สร้าง 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 และซอฟต์แวร์ที่ตอบโจทย์ธุรกิจของคุณอย่างมีประสิทธิภาพ ติดต่อเรา เพื่อเริ่มต้นการเปลี่ยนแปลงทางดิจิทัลวันนี้!