Validasi Input
Penjelasan
Fiber juga TIDAK punya validasi bawaan — pola paling umum SAMA dengan Echo: memakai package go-playground/validator dengan tag validate: di struct, bedanya cuma cara memanggilnya (Fiber tidak punya c.Validate() bawaan seperti Echo, validator dipanggil langsung sebagai instance terpisah).
Contoh Konsep
// go get github.com/go-playground/validator/v10
var validate = validator.New()
type ProdukRequest struct {
Nama string `json:"nama" validate:"required,min=3"`
Harga float64 `json:"harga" validate:"required,gte=0"`
}
app.Post("/produk", func(c *fiber.Ctx) error {
var req ProdukRequest
if err := c.BodyParser(&req); err != nil {
return err
}
if err := validate.Struct(req); err != nil {
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{"error": err.Error()})
}
return c.Status(fiber.StatusCreated).JSON(req)
})
Praktikum
Tambahkan tag validate ke ArtikelRequest: Judul wajib string minimal 5 karakter, Isi wajib diisi. Panggil validate.Struct() setelah c.BodyParser() di route POST /artikel.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
validator.New() SEBAIKNYA dibuat SEKALI di level package (variabel global, seperti var validate = validator.New() di contoh) dan dipakai ulang di semua handler — instance validator aman dipakai bersamaan dari banyak goroutine (thread-safe), jadi tidak perlu dibuat baru tiap request.