Trong thế giới phát triển web hiện đại, RESTful API đóng vai trò quan trọng trong việc xây dựng các ứng dụng backend mạnh mẽ, linh hoạt và dễ mở rộng. Go (Golang) là một trong những ngôn ngữ lập trình phổ biến để phát triển API nhờ hiệu suất cao và cú pháp đơn giản. Khi kết hợp với MongoDB – một cơ sở dữ liệu NoSQL mạnh mẽ, bạn có thể tạo ra một API hiệu quả và dễ dàng mở rộng.
Bài viết này sẽ hướng dẫn bạn cách xây dựng RESTful API với Go và MongoDB, từ cài đặt môi trường đến triển khai các chức năng cơ bản như CRUD (Create, Read, Update, Delete).
1. Cài Đặt Môi Trường
Trước khi bắt đầu, bạn cần cài đặt các công cụ sau:
- Go: Tải và cài đặt từ golang.org
- MongoDB: Tải và cài đặt từ mongodb.com
- Postman: Công cụ kiểm thử API (không bắt buộc nhưng hữu ích)
Tiếp theo, bạn tạo một thư mục dự án và khởi tạo module Go:
mkdir go-mongo-api
cd go-mongo-api
go mod init example.com/go-mongo-api
Cài đặt các thư viện cần thiết:
go get go.mongodb.org/mongo-driver/mongo
go get github.com/gin-gonic/gin
2. Kết Nối Go với MongoDB
Tạo tệp main.go
và thêm đoạn mã sau để kết nối MongoDB:
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func connectDB() *mongo.Client {
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal("Không thể kết nối MongoDB")
}
fmt.Println("Kết nối thành công MongoDB")
return client
}
func main() {
client := connectDB()
defer client.Disconnect(context.TODO())
}
Chạy lệnh go run main.go
để kiểm tra kết nối.
3. Xây Dựng API CRUD
a. Tạo Router với Gin
Thêm thư viện gin-gonic/gin
để xử lý HTTP request:
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run()
}
Chạy go run main.go
và kiểm tra API tại http://localhost:8080/ping
.
b. Tạo API CRUD
Dưới đây là một API CRUD đơn giản để quản lý danh sách người dùng.
Tạo struct User
type User struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
Thêm Người Dùng (Create)
r.POST("/users", func(c *gin.Context) {
var user User
if err := c.BindJSON(&user); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
collection := client.Database("testdb").Collection("users")
result, err := collection.InsertOne(context.TODO(), user)
if err != nil {
c.JSON(500, gin.H{"error": "Không thể thêm người dùng"})
return
}
c.JSON(201, gin.H{"message": "Người dùng đã được tạo", "id": result.InsertedID})
})
Lấy Danh Sách Người Dùng (Read)
r.GET("/users", func(c *gin.Context) {
var users []User
collection := client.Database("testdb").Collection("users")
cursor, err := collection.Find(context.TODO(), bson.M{})
if err != nil {
c.JSON(500, gin.H{"error": "Lỗi lấy danh sách người dùng"})
return
}
defer cursor.Close(context.TODO())
for cursor.Next(context.TODO()) {
var user User
cursor.Decode(&user)
users = append(users, user)
}
c.JSON(200, users)
})
Tương tự, bạn có thể thêm các API cập nhật và xóa người dùng.
4. Tổng Kết
Chúng ta đã cùng nhau xây dựng một RESTful API đơn giản bằng Go và MongoDB, bao gồm:
- Cài đặt môi trường
- Kết nối MongoDB với Go
- Xây dựng các API CRUD
Bạn có thể mở rộng API này bằng cách thêm xác thực, phân trang hoặc triển khai trên cloud.
Nếu bạn thấy bài viết hữu ích, hãy chia sẻ với bạn bè nhé!