Error Handler
Tidak semua error adalah "internal server error". Kita harus menghandle berbagai jenis error yang muncul. Pada bab ini kita akan menghandle semua jenis error dengan standar format seperti berikut :
{
"status_code": "REBEL-404",
"status_message": "Data Not Found",
"data": null
}Custome Error
Buat custome error yang mengimplementasikan error interface. Custome error yang dibuat mempunyai field :
type Error struct {
Err error
Status string
MessageStatus string
HTTPStatus int
}Karena mengimplementasikan interface error, maka custome error yang dibuat harus mengimplementasikan method
func Error() string
func (err *Error) Error() string {
return err.Err.Error()
}Untuk mempermudah saat pembuatan custome error, kita akan melengkapi fungsi dengan fungsi ErrBadRequest, ErrNotFound, dan ErrForbidden.
Berikut file baru libraries/api/error.go yang berisi :
Kode di atas error karena kita memakai beberapa konstanta yang belum dibuat. Buatlah file libraries/api/status_code.go untuk menyimpan konstanta status code.
Buat file baru libraries/api/status_message.go untuk menyimpan konstanta status message.
Ubah api.Decode pada file libraries/api/request.go agar mengembalikan custome error dengan status "400 Bad Request"
Kemudian setiap error harus didefinisikan dengan jelas merupakan error custome apa. Ubah method Get pada file models/user.go agar mengembalikan ErrNotFound
Ubah file usecases/user_usecase.go agar error password not match diganti menjadi ErrBadRequest
Response Format
Edit file libraries/api/response.go untuk mengubah format response mengikuti struct berikut :
Ubah fungsi Response di file libraries/api/response.go agar mendukung format yang baru
Dan kita akan membuat dua response, yaitu ResponseOK dan ResponseError, untuk itu kita edit file libraries/api/response.go untuk menambahkan dua fungsi response yang baru.
Ubah file controllers/users.go agar memanggil fungsi response yang baru : ResponseOK atau ResponseError
Last updated
Was this helpful?