Validasi Input
Penjelasan
Echo TIDAK punya validasi bawaan — pola umum yang dipakai adalah menambahkan tag validate: di field struct request, lalu memakai package go-playground/validator untuk menjalankan pengecekannya. Validator ini didaftarkan lewat e.Validator sebelum bisa dipakai lewat c.Validate().
Contoh Konsep
// go get github.com/go-playground/validator/v10
type CustomValidator struct {
validator *validator.Validate
}
func (cv *CustomValidator) Validate(i interface{}) error {
return cv.validator.Struct(i)
}
// main(): e.Validator = &CustomValidator{validator: validator.New()}
type ProdukRequest struct {
Nama string `json:"nama" validate:"required,min=3"`
Harga float64 `json:"harga" validate:"required,gte=0"`
}
e.POST("/produk", func(c echo.Context) error {
var req ProdukRequest
if err := c.Bind(&req); err != nil {
return err
}
if err := c.Validate(&req); err != nil {
return c.JSON(http.StatusUnprocessableEntity, map[string]string{"error": err.Error()})
}
return c.JSON(http.StatusCreated, req)
})
Praktikum
Tambahkan tag validate ke ArtikelRequest: Judul wajib string minimal 5 karakter (validate:"required,min=5"), Isi wajib diisi (validate:"required"). Panggil c.Validate() setelah c.Bind() di route POST /artikel.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
e.Validator WAJIB diset SEKALI di awal (biasanya di main(), sebelum server jalan) sebelum c.Validate() bisa dipakai di route mana pun — lupa langkah ini membuat c.Validate() error "Validator not registered" walau tag validate: di struct-nya sudah benar.