Hướng Dẫn Xây Dựng CRUD REST API với NestJS, Docker, Swagger và Prisma
Chào mừng bạn đến với bài hướng dẫn chi tiết về cách tạo ra một RESTful API với NestJS, Docker, Swagger và Prisma. Mục tiêu của hướng dẫn này là cung cấp cho bạn các bước cần thiết để xây dựng một backend mạnh mẽ và hiệu quả, bất kể bạn là một lập trình viên có nhiều năm kinh nghiệm hay là một người mới bắt đầu.
Mục Tiêu Hướng Dẫn
Chúng ta sẽ xây dựng một ứng dụng cho phép thêm, sửa, và xóa các công thức nấu ăn (recipe). Mỗi công thức nấu ăn sẽ bao gồm các thông tin sau:
- Title: Tên của công thức
- Description: Mô tả ngắn gọn về công thức
- Ingredients: Danh sách nguyên liệu cần thiết
- Instructions: Các bước thực hiện món ăn
Công Nghệ Sử Dụng
Trong hướng dẫn này, chúng ta sẽ sử dụng một số công nghệ nổi bật:
- NestJS: Một framework Node.js hiện đại.
- Prisma: Công cụ nguồn mở dành cho cơ sở dữ liệu.
- PostgreSQL: Hệ quản trị cơ sở dữ liệu nguồn mở.
- Docker: Nền tảng phát triển và triển khai ứng dụng.
- Swagger: Công cụ thiết kế, xây dựng và tài liệu hóa các API.
- TypeScript: Ngôn ngữ lập trình dựa trên JavaScript với tính năng kiểu tĩnh.
Mỗi công nghệ sẽ đóng vai trò quan trọng trong việc tạo ra một ứng dụng dễ mở rộng và bảo trì. Chúng ta sẽ đi sâu hơn vào từng công nghệ trong quá trình hướng dẫn.
Điều Kiện Tiên Quyết
Hướng dẫn này được thiết kế thân thiện với người mới bắt đầu, nhưng bạn cần có một số kiến thức cơ bản về:
- TypeScript
- NestJS
- Docker
Nếu bạn chưa quen thuộc với những công nghệ này, đừng lo lắng! Tôi sẽ hướng dẫn bạn từng bước một.
Thiết Lập Môi Trường Phát Triển
Trong hướng dẫn này, chúng ta sẽ sử dụng những công cụ sau:
- Node.js: Môi trường thực thi cho ứng dụng
- Docker: Dùng để chứa database
- Visual Studio Code: Trình soạn thảo mã nguồn
- PostgreSQL: Cơ sở dữ liệu sử dụng
- NestJS: Framework cho Node.js
Bước 1: Thiết Lập Dự Án NestJS
Đầu tiên, hãy cài đặt NestJS CLI trên máy tính của bạn:
bash
npm i -g @nestjs/cli
Khởi động một dự án mới bằng lệnh sau:
bash
nest new recipe
Trong quá trình khởi tạo, bạn sẽ được hỏi chọn một package manager, hãy chọn npm
. Sau đó, mở dự án trong Visual Studio Code để theo dõi cấu trúc thư mục mà NestJS CLI đã tạo.
Bước 2: Cài Đặt PostgreSQL Qua Docker
Để lưu trữ các recipe, chúng ta sẽ sử dụng cơ sở dữ liệu PostgreSQL và Docker sẽ giúp chúng ta chứa cơ sở dữ liệu này một cách dễ dàng. Trước tiên, hãy đảm bảo bạn đã cài đặt Docker.
Tạo file docker-compose.yml
trong thư mục gốc của dự án:
bash
touch docker-compose.yml
Thêm vào nội dung sau:
yaml
version: '3.8'
services:
postgres:
image: postgres:13.5
restart: always
environment:
- POSTGRES_USER=recipe
- POSTGRES_PASSWORD=RecipePassword
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
volumes:
postgres:
Chạy Docker để khởi động container PostgreSQL:
bash
docker-compose up -d
Bước 3: Thiết Lập Prisma
Prisma sẽ giúp chúng ta tương tác với cơ sở dữ liệu. Cài đặt Prisma CLI:
bash
npm install prisma -D
Khởi tạo Prisma:
bash
npx prisma init
Thay đổi file .env
để cập nhật thông tin kết nối với PostgreSQL:
DATABASE_URL="postgres://recipe:RecipePassword@localhost:5432/recipe"
Mở file schema.prisma
để định nghĩa các model dữ liệu:
prisma
model Recipe {
id Int @id @default(autoincrement())
title String @unique
description String?
ingredients String
instructions String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Chạy lệnh migrate để tạo bảng trong database:
bash
npx prisma migrate dev --name init
Bước 4: Cài Đặt Swagger
Cài đặt Swagger cho ứng dụng của bạn:
bash
npm install --save @nestjs/swagger swagger-ui-express
Mở file main.ts
để cấu hình Swagger:
typescript
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('Recipes API')
.setDescription('API cho các công thức nấu ăn')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(3000);
}
bootstrap();
Bước 5: Triển Khai CRUD cho Recipe Model
Tạo ra các endpoint cho CRUD operations:
- POST /recipe: Tạo mới một recipe.
- GET /recipe: Lấy danh sách tất cả các recipe.
- GET /recipe/:id: Lấy một recipe cụ thể dựa trên ID.
- PATCH /recipe/:id: Cập nhật một recipe.
- DELETE /recipe/:id: Xóa một recipe.
Kết Luận
Trong hướng dẫn này, chúng ta đã đi qua toàn bộ quá trình xây dựng một REST API sử dụng NestJS và Prisma. Hướng dẫn cung cấp kiến thức nền tảng vững chắc cho các dự án phát triển ứng dụng sau này. Hãy tự do mở rộng và tùy chỉnh để phù hợp với nhu cầu của bạn. Chúc bạn thành công trong việc lập trình!
source: viblo