Go telah menjadi pilihan utama bagi developer backend yang mencari performa tinggi tanpa kompleksitas yang berlebihan. Namun, framework bawaan net/http terkadang terasa terlalu minimalis untuk proyek produksi yang membutuhkan routing dinamis, middleware chain, dan error handling yang elegan. Fiber, framework web yang terinspirasi dari Express.js, hadir untuk mengisi celah tersebut dengan menawarkan API yang familiar namun dioptimalkan untuk kecepatan ekstrem berkat penggunaan fasthttp di balik layar. Artikel ini akan membawa kamu membangun REST API production-ready dengan Go dan Fiber dari nol, lengkap dengan struktur folder yang scalable dan best practices yang umum digunakan di industri.
Performa bukan satu-satunya alasan mengapa Fiber menarik perhatian. Komunitasnya yang aktif, dokumentasi yang lengkap, dan ekosistem middleware yang kaya membuatnya cocok untuk proyek skala kecil hingga enterprise. Bagi developer JavaScript/Node.js yang ingin beralih ke Go, kurva belajar Fiber relatif landai karena pola penggunaannya yang hampir identik dengan Express. Mari mulai dengan menyiapkan environment dan memahami fondasi dasar sebelum membangun endpoint yang kompleks.
Sebelum menulis kode pertama, pastikan Go versi 1.21 atau lebih baru sudah terpasang di sistem. Kamu bisa memverifikasi dengan menjalankan go version di terminal. Jika belum terpasang, unduh installer resmi dari golang.org/dl atau gunakan package manager seperti Homebrew untuk macOS dan apt untuk Ubuntu.
Buat direktori proyek baru dan inisialisasi module Go:
mkdir go-fiber-api && cd go-fiber-api
go mod init github.com/username/go-fiber-api
Instal Fiber dengan perintah sederhana berikut. Versi terbaru akan otomatis terdaftar di go.mod:
go get github.com/gofiber/fiber/v2
Buat file main.go sebagai entry point aplikasi. Pada tahap ini, kita hanya akan memastikan server bisa berjalan dan merespons request dasar. Struktur folder akan disederhanakan terlebih dahulu, lalu direfactor saat fitur bertambah.
Buka file main.go dan tulis konfigurasi server Fiber dengan beberapa pengaturan production-aware seperti kompresi response dan custom error handler. Fiber memungkinkan konfigurasi timeout, body limit, dan case sensitivity pada path melalui struct fiber.Config.
package main
import (
"log"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New(fiber.Config{
AppName: "Go Fiber API v1.0",
})
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{
"message": "API berjalan dengan normal",
})
})
log.Fatal(app.Listen(":3000"))
}
Jalankan aplikasi dengan go run main.go dan akses http://localhost:3000. Jika respons JSON muncul, server sudah berfungsi. Fiber secara default akan menangani graceful shutdown jika proses menerima sinyal SIGTERM, sebuah fitur penting untuk deployment di container orchestrator seperti Kubernetes.
Untuk API yang akan berkembang, struktur flat di satu file tidak lagi memadai. Adopsi pola layered architecture dengan folder handlers, models, routes, dan middleware. Pendekatan ini memisahkan concerns dan memudahkan unit testing di masa depan.
go-fiber-api/
├── main.go
├── handlers/
│ └── book_handler.go
├── models/
│ └── book.go
├── routes/
│ └── route.go
└── middleware/
└── logger.go
File models/book.go mendefinisikan struct dengan tag validasi. File handlers/book_handler.go menangankan business logic. File routes/route.go menggabungkan semua endpoint. Pemisahan ini memudahkan developer baru untuk memahami codebase dalam waktu singkat tanpa harus membaca seluruh file dari atas ke bawah.
Kita akan membangun endpoint untuk mengelola daftar buku sebagai contoh CRUD lengkap. Gunakan fiber.Map untuk response yang konsisten dan tambahkan status code HTTP yang sesuai. Fiber menyediakan helper seperti c.Status() dan c.BodyParser() untuk memudahkan interaksi dengan request dan response.
func CreateBook(c *fiber.Ctx) error {
book := new(models.Book)
if err := c.BodyParser(book); err != nil {
return c.Status(400).JSON(fiber.Map{
"error": "Format request tidak valid",
})
}
// Simpan ke database atau slice sementara
return c.Status(201).JSON(book)
}
Tambahkan routing untuk semua operasi CRUD di file routes/route.go. Gunakan grup route dengan prefix /api/v1 untuk versioning sejak dini. Pendekatan ini menghindari breaking changes saat API berevolusi dan memudahkan deprecation strategy di masa depan.
Middleware di Fiber bekerja secara sequential. Logger bawaan bisa diaktifkan dengan app.Use(logger.New()). Untuk custom middleware seperti CORS atau rate limiting, gunakan package oficial gofiber/middleware atau tulis sendiri dengan signature func(c *fiber.Ctx) error.
import "github.com/gofiber/fiber/v2/middleware/cors"
app.Use(cors.New(cors.Config{
AllowOrigins: "*",
AllowHeaders: "Origin, Content-Type, Accept",
}))
Error handler global bisa dikonfigurasi di fiber.Config untuk memastikan semua panic atau error tidak terduga tetap merespons dengan JSON yang terstruktur. Ini mencegah exposure stack trace ke client dan memberikan experience yang konsisten bagi consumer API.
Fiber menyediakan httptest package untuk testing endpoint tanpa harus menjalankan server nyata. Tulis test untuk setiap handler menggunakan fiber.AcquireCtx dan fiber.ReleaseCtx agar memory tetap efisien saat test suite berjalan dalam jumlah besar.
func TestCreateBook(t *testing.T) {
app := fiber.New()
app.Post("/books", handlers.CreateBook)
// Buat request dan assert response
}
Untuk deployment, build binary dengan go build -o app dan jalankan di server atau container Docker. Binary Go bersifat self-contained, sehingga image Docker bisa sangat kecil jika menggunakan multi-stage build dengan base image scratch atau distroless. Dokumentasi lengkap Fiber tersedia di docs.gofiber.io.
Sumber: Dokumentasi Fiber, GitHub Repository Fiber
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu