Xây dựng RESTful API với Go, Fiber, GORM và Docker

0 0 0

Người đăng: son vu

Theo Viblo Asia

Tiếp tục series về Go. Hôm nay mình sẽ hướng dẫn bạn cách xây dựng một RESTful API hoàn chỉnh bằng Go, kết hợp với các công cụ mạnh mẽ và phổ biến trong hệ sinh thái phát triển backend hiện đại.

Screenshot 2025-05-26 at 13.20.24.png

Vì sao chọn Fiber + GORM + Docker?

🚀 Fiber – Web framework nhẹ, cực nhanh, lấy cảm hứng từ Express.js
🔗 GORM – ORM mạnh mẽ giúp bạn thao tác cơ sở dữ liệu dễ dàng hơn
🐳 Docker – Đóng gói và triển khai ứng dụng một cách linh hoạt, nhất quán

Cấu trúc dự án

go-fiber-api/
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── main.go
├── config/
│ └── database.go
├── models/
│ └── user.go
├── handlers/
│ └── user_handler.go
├── routes/
│ └── router.go
│ └── user_route.go

Bắt đầu thôi nào. Let's go 🏃‍♂️🏃‍♂️🏃‍♂️

Tạo dự án

Bước đầu tiên chúng ta sẽ khởi tạo thư mục chứa dự án.

mkdir go-fiber-api && cd go-fiber-api
go mod init go-fiber-api

Cài đặt các thư viện cần thiết:

go get github.com/gofiber/fiber/v2
go get gorm.io/gorm
go get gorm.io/driver/postgres

Kết nối Database với GORM

Tạo file config/database.go
Ở đây mình sẽ dùng postgresql

package config import ( "fmt" "gorm.io/driver/postgres" "gorm.io/gorm"
) var DB *gorm.DB func ConnectDB() { dsn := "host=db user=postgres password=postgres dbname=fiber_db port=5432 sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic("Failed to connect to database!") } DB = db fmt.Println("📦 Database connected!")
}

Tạo model User

Tại file models/user.go

package models type User struct { ID uint `json:"id" gorm:"primaryKey"` Name string `json:"name"` Email string `json:"email"`
}

Viết Handler xử lý API

Tạo file handlers/user_handler.go

package handlers import ( "github.com/gofiber/fiber/v2" "go-fiber-api/config" "go-fiber-api/models"
) func GetUsers(c *fiber.Ctx) error { var users []models.User config.DB.Find(&users) return c.JSON(users)
} func CreateUser(c *fiber.Ctx) error { user := new(models.User) if err := c.BodyParser(user); err != nil { return c.Status(400).JSON(fiber.Map{"error": "Cannot parse JSON"}) } config.DB.Create(&user) return c.JSON(user)
}

Định tuyến các API

Trong bài này, chúng ta sẽ thao tác với resources là users. Vì vậy chúng ta sẽ định nghĩa các REST API liên quan đến resources này trong file routes/user_route.go và import vào trong router tổng.

File: routes/user_route.go

package routes import ( "github.com/gofiber/fiber/v2" "go-fiber-api/handlers"
) func RegisterUserRoutes(router fiber.Router) { user := router.Group("/users") user.Get("/", handlers.GetUsers) user.Post("/", handlers.CreateUser)
}

File: routes/router.go

package routes import ( "github.com/gofiber/fiber/v2"
) func InitRoutes(app *fiber.App) { api := app.Group("/api") RegisterUserRoutes(api) // Các route từ user_route.go
}

Khởi chạy Fiber App

File: main.go

package main import ( "github.com/gofiber/fiber/v2" "go-fiber-api/config" "go-fiber-api/models" "go-fiber-api/routes"
) func main() { app := fiber.New() config.ConnectDB() config.DB.AutoMigrate(&models.User{}) routes.InitRoutes(app) app.Listen(":3000")
}

Cài đặt Docker vào trong app

Tạo Dockerfile

FROM golang:1.20-alpine WORKDIR /app COPY go.mod ./
COPY go.sum ./
RUN go mod download COPY . . RUN go build -o main . EXPOSE 3000 CMD ["./main"]

Tạo docker-compose.yml

services: api: container_name: go-fiber-api build: . ports: - "3000:3000" depends_on: - db environment: - DB_HOST=db - DB_USER=postgres - DB_PASSWORD=postgres - DB_NAME=fiber_db - DB_PORT=5432 volumes: - .:/app db: container_name: go-fiber-db image: postgres:14 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: fiber_db ports: - "5432:5432"

Sau khi bạn config xong docker như trên, bạn chỉ cần mở terminal của dự án lên và run:

docker-compose up --build

Khi bạn sẽ thấy dòng: Database connected! là đã connect và build thành công rồi đó.

API sẽ chạy tại: http://localhost:3000

Test thử với Postman hoặc curl

GET http://localhost:3000/api/users

POST http://localhost:3000/api/users

{ "name": "Alice", "email": "alice@example.com"
}

Tổng kết

Vậy là chúng ta đã hoàn thành một RESTful API cơ bản với Go, Fiber, GORM và Docker. Hy vọng bài viết này sẽ giúp các bạn tiếp cận Go một cách dễ dàng và hiệu quả hơn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt Python trên Windows

Trong bài hướng dẫn này, chúng ta sẽ bàn luận về cách cài đặt Python (Thiết lập môi trường) để lập trình Python trên hệ điều hành Windows. .

0 0 20

- vừa được xem lúc

Tăng tốc mà vẫn giữ chất lượng phần mềm? Đây là cách

Trong phát triển phần mềm, tốc độ và chất lượng không phải lúc nào cũng đối lập, nhưng thường tồn tại mâu thuẫn trong thực tế. Các engineering team thường xuyên đối mặt với tình huống này: cần release

0 0 2

- vừa được xem lúc

🔥 Top 10 AI Coding Agents đáng dùng nhất hiện nay

Trí tuệ nhân tạo (AI) đang từng bước thay đổi cách các kỹ sư phần mềm xây dựng, triển khai và duy trì hệ thống. Trong đó, các AI coding agents – công cụ hỗ trợ viết mã và tối ưu hóa quy trình phát tri

0 0 2

- vừa được xem lúc

Hướng dẫn build dự án GO với Fiber cho người mới bắt đầu.

Go (hay Golang) là một ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google, nổi bật với hiệu suất cao, khả năng xử lý đồng thời mạnh mẽ và cú pháp đơn giản. Go đặc biệt phù hợp cho các hệ thống

0 0 2

- vừa được xem lúc

Hướng dẫn finetune mô hình LLM đơn giản và miễn phí với Unsloth

Chào mừng các bạn đến với bài viết hướng dẫn chi tiết cách finetune (tinh chỉnh) một mô hình ngôn ngữ lớn (LLM) một cách đơn giản và hoàn toàn miễn phí sử dụng thư viện Unsloth. Trong bài viết này, ch

0 0 7

- vừa được xem lúc

SERIES INDEX NÂNG CAO - BÀI 1: PHÂN TÍCH NHỮNG SAI LẦM PHỔ BIẾN KHI SỬ DỤNG INDEX TRONG MYSQL

Nếu anh em thấy hay thì ủng hộ tôi 1 follow + 1 upvote + 1 bookmark + 1 comment cho bài viết này tại Mayfest 2025 nhé. Còn nếu bài viết chưa hữu ích thì tôi cũng hi vọng anh em để lại những góp ý thẳn

0 0 8