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 GoMongoDB, 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é!

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment