Hướng dẫn xây dựng REST API với NestJS, PostgreSQL và Prisma
Trong hướng dẫn này, bạn sẽ học được:
- Cách thiết lập PostgreSQL với Docker
- Định nghĩa schema Prisma và chạy migrations
- Tích hợp Prisma với NestJS
- Xây dựng các endpoint CRUD (Người dùng & Bài viết)
- Thực tiễn tốt nhất về xác thực và triển khai
Giới thiệu
REST API đã trở thành một phần không thể thiếu trong việc phát triển ứng dụng web hiện đại. Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một REST API hoàn chỉnh với NestJS, PostgreSQL và Prisma. NestJS là một framework Node.js mạnh mẽ giúp việc phát triển ứng dụng trở nên dễ dàng và hiệu quả hơn. PostgreSQL là một cơ sở dữ liệu quan hệ phổ biến, và Prisma là một ORM giúp dễ dàng tương tác với cơ sở dữ liệu.
Mục tiêu
Mục tiêu của hướng dẫn này là giúp bạn xây dựng một REST API có thể sử dụng trong môi trường sản xuất, với các chức năng cơ bản như tạo, đọc, cập nhật và xóa (CRUD) dữ liệu. Chúng ta sẽ bắt đầu từ việc thiết lập môi trường phát triển cho đến khi hoàn thành API.
1. Thiết lập PostgreSQL với Docker
Docker là một công cụ tuyệt vời giúp chúng ta dễ dàng tạo và quản lý môi trường phát triển. Để bắt đầu, chúng ta cần cài đặt Docker trên máy tính của mình. Sau khi cài đặt xong, bạn có thể tạo một container PostgreSQL bằng cách sử dụng lệnh sau:
bash
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -d postgres
Giải thích lệnh:
--name my-postgres: Đặt tên cho container-e POSTGRES_USER=myuser: Tạo người dùng với tên làmyuser-e POSTGRES_PASSWORD=mypassword: Đặt mật khẩu cho người dùng-e POSTGRES_DB=mydb: Tạo cơ sở dữ liệu với tênmydb-p 5432:5432: Mở cổng 5432 để truy cập vào PostgreSQL-d postgres: Chạy container trong chế độ nền
Sau khi chạy lệnh trên, bạn đã có một container PostgreSQL sẵn sàng để sử dụng.
2. Định nghĩa schema Prisma và chạy migrations
2.1 Cài đặt Prisma
Trước tiên, bạn cần cài đặt Prisma CLI:
bash
npm install @prisma/cli --save-dev
Tiếp theo, tạo một file cấu hình Prisma:
bash
npx prisma init
2.2 Định nghĩa schema
Mở file schema.prisma và định nghĩa các model cho người dùng và bài viết:
prisma
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
author User @relation(fields: [authorId], references: [id])
authorId Int
}
2.3 Chạy migrations
Sau khi định nghĩa schema, bạn cần chạy migrations để tạo bảng trong cơ sở dữ liệu:
bash
npx prisma migrate dev --name init
3. Tích hợp Prisma với NestJS
3.1 Cài đặt NestJS
Nếu bạn chưa cài đặt NestJS, hãy làm theo hướng dẫn sau:
bash
npm i -g @nestjs/cli
nest new project-name
3.2 Cài đặt Prisma Client
Cài đặt Prisma Client để có thể tương tác với cơ sở dữ liệu:
bash
npm install @prisma/client
3.3 Tạo dịch vụ Prisma
Tạo một dịch vụ để xử lý logic truy vấn cơ sở dữ liệu:
typescript
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { User } from '@prisma/client';
@Injectable()
export class UserService {
constructor(private prisma: PrismaService) {}
async createUser(data: User) {
return this.prisma.user.create({ data });
}
async getUsers() {
return this.prisma.user.findMany();
}
}
4. Xây dựng các endpoint CRUD (Người dùng & Bài viết)
4.1 Tạo Controller
Tạo controller để xử lý các yêu cầu HTTP:
typescript
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from '@prisma/client';
@Controller('users')
export class UserController {
constructor(private userService: UserService) {}
@Post()
create(@Body() userData: User) {
return this.userService.createUser(userData);
}
@Get()
findAll() {
return this.userService.getUsers();
}
}
5. Thực tiễn tốt nhất cho xác thực và triển khai
Để đảm bảo API của bạn an toàn và hiệu quả, hãy tham khảo các thực tiễn tốt nhất sau:
- Xác thực người dùng: Sử dụng JWT hoặc OAuth2 để xác thực người dùng.
- Kiểm tra lỗi: Thêm cơ chế kiểm tra lỗi cho các yêu cầu API.
- Ghi log: Ghi lại các hoạt động của API để dễ dàng theo dõi và phát hiện sự cố.
6. Mẹo tối ưu hiệu suất
- Kết nối cơ sở dữ liệu: Sử dụng kết nối pool để tối ưu hóa việc truy cập cơ sở dữ liệu.
- Caching: Cân nhắc sử dụng caching để giảm tải cho cơ sở dữ liệu.
7. Giải quyết vấn đề thường gặp
- Lỗi kết nối cơ sở dữ liệu: Kiểm tra lại các thông tin kết nối trong file cấu hình.
- Lỗi xác thực: Đảm bảo rằng token xác thực hợp lệ.
8. Kết luận
Bài viết này đã hướng dẫn bạn cách xây dựng một REST API với NestJS, PostgreSQL và Prisma. Hy vọng rằng bạn sẽ áp dụng những kiến thức này vào dự án của mình. Đừng quên theo dõi blog của chúng tôi để cập nhật thêm nhiều kiến thức mới!
👉 Bắt đầu ngay với dự án của bạn!
Câu hỏi thường gặp (FAQ)
Q1: Tôi cần những gì để bắt đầu với NestJS?
A1: Bạn cần Node.js, npm và kiến thức cơ bản về TypeScript.
Q2: Prisma có miễn phí không?
A2: Có, Prisma có phiên bản miễn phí cho các dự án nhỏ.
Q3: Tôi có thể triển khai API này lên môi trường nào?
A3: Bạn có thể triển khai trên nhiều nền tảng như Heroku, AWS, hoặc DigitalOcean.