Study
Echo

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.

Editor Latihan

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.