pemrograman

08 Menambahkan Validator Request Menggunakan Golang Playground

Pada tahapan ini kita akan menambahkan validasi untuk setiap request yang dikirim ke dalam API. Misalkan pada request tambah, ubah dan hapus. Validasi yang kita gunakan adalah package github.com/go-playground/validator.

Jika kita lihat pada dokumentasinya, ada fungsi yang akan kita pakai pada package tersebut dengan melakukan pengecekan struct yang akan kita validasi.

err := validate.Struct(myStruct)
validateErrors := err(.Validator.ValidationErrors)

Maka kita perlu tambahkan beberapa tags pada fields yang ada pada struct yang akan kita validasi.

Menambahkan Dependency Validator

Pertama kita tambahkan terlebih dahulu package validator yang akan kita butuhkan kepada projek dengan menggunakan golang modul.

go get github.com/go-playground/validator/v10

Lalu import validator package tersebut kepada kode yang kita gunakan

import "github.com/go-playground/validator/v10"

Menambahkan Validasi pada Struct

Pada request create artikel ada beberapa validasi yang harus kita terapkan dengan menambahkan pada struct create request seperti dibawah ini.

type ArticleCreateRequest struct {
	Title    string `validate:"required,max=160,min=0"`
	Content  string `validate:"required"`
	CreateAt time.Time
}

Selanjutnya tambahkan juga request pada request update artikel

type ArticleUpdateRequest struct {
	ID       int64  `validate:"required"`
	Title    string `validate:"required,max=160,min=0"`
	Content  string `validate:"required"`
	UpdateAt time.Time
}

Setelah struct menambahkan validator di setiap fields yang membutuhkan validasi selanjutnya kita tambahkan inisialisasi validator pada handler.

type Delivery struct {
	articleUsecase usecase.ArticleUsecase
	validate       *validator.Validate
}

func New(articleUsecase usecase.ArticleUsecase) *Delivery {
	return &Delivery{
		articleUsecase: articleUsecase,
		validate:       validator.New(),
	}
}

Dan menambahkan validasi struct pada fungsi Create dan Update pada handler posisikan sebelum mengakses ke dalam usecase layer.

func (d *Delivery) Store(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
	...
	...

	err = d.validate.Struct(request)
	if err != nil {
		response.Code = http.StatusBadRequest
		response.Status = err.Error()
	}

	...
	...
}

Dan pada fungsi Update kita tambahkan juga pada handler seperti ini.

func (d *Delivery) Update(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
	...
	...

	err = d.validate.Struct(request)
	if err != nil {
		response.Code = http.StatusBadRequest
		response.Status = err.Error()
	}
	
	...
	...
}

Semua fungsi yang kita membutuhkan validasi request sudah kita terapkan sehingga ketika ada request dari user validator ini bekerja agar isian form yang pada struct tersebut tidak berisikan kosong dan sesuai aturan yang sudah ditentukan oleh kita.

comments powered by Disqus