Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
28 Jan 2024 · 2 mnt baca ·Artikel 85 / 119
Go

08 Menambahkan Validator Request Menggunakan Golang Playground

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

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.

go
1err := validate.Struct(myStruct)
2validateErrors := 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.

bash
1go get github.com/go-playground/validator/v10
Lalu import validator package tersebut kepada kode yang kita gunakan
go
1import "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.

go
1type ArticleCreateRequest struct {
2	Title    string `validate:"required,max=160,min=0"`
3	Content  string `validate:"required"`
4	CreateAt time.Time
5}

Selanjutnya tambahkan juga request pada request update artikel

go
1type ArticleUpdateRequest struct {
2	ID       int64  `validate:"required"`
3	Title    string `validate:"required,max=160,min=0"`
4	Content  string `validate:"required"`
5	UpdateAt time.Time
6}

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

go
 1type Delivery struct {
 2	articleUsecase usecase.ArticleUsecase
 3	validate       *validator.Validate
 4}
 5
 6func New(articleUsecase usecase.ArticleUsecase) *Delivery {
 7	return &Delivery{
 8		articleUsecase: articleUsecase,
 9		validate:       validator.New(),
10	}
11}

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

go
 1func (d *Delivery) Store(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
 2	...
 3	...
 4
 5	err = d.validate.Struct(request)
 6	if err != nil {
 7		response.Code = http.StatusBadRequest
 8		response.Status = err.Error()
 9	}
10
11	...
12	...
13}

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

go
 1func (d *Delivery) Update(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
 2	...
 3	...
 4
 5	err = d.validate.Struct(request)
 6	if err != nil {
 7		response.Code = http.StatusBadRequest
 8		response.Status = err.Error()
 9	}
10	
11	...
12	...
13}

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.

Artikel Terkait

💬 Komentar