Membuat Service PHP Menggunakan Lumen Framework Part 4 Validation Dan Error Handling

Pada tutorial ini akan membahas tentang Validation dan Error handling. Tujuan nya adalah untuk memberikan informasi yang lebih baik dan relevan apabila mengalami error hadling dan pada saat client request pada server.

1. Mapping response pagination



Kalau melihat dari response nya ada beberapa data yang tidak kita perlukan, seperti:
first_page_url, from, last_page, to. Pertama kita akan mengubah response nya terlebih dahulu.

buka file PostController dan rubah code method index. Dan tambahkan code menjadi seperti dibawah ini :
 $output = [
                    "total_count"=>$post["total"],
                    "limit"=>$post["per_page"],
                    "pagination"=>[
                        "next_page"=>$post["next_page_url"],
                        "current_page"=>$post["current_page"]
                    ],
                    "data"=>$post["data"]
                ];
                return response()->json($output, 200);




Ketika kita panggil endpoint ​http://localhost:8000/posts?page=2​, maka hasilnya harus
berbeda dengan endpoint ​http://localhost:8000/posts​. Seperti dibawah ini. Kita lihat
value dari next_page_url pada line 5 adalah null, karena sudah tidak ada lagi rows yang
perlu ditampilkan di halaman berikut nya.Kita lihat sekarang response nya menjadi lebih clean, dan lebih nyaman untuk dibaca oleh programmer. 

2. Validation Request

Untuk membuat validasi pada fungsi create, mari kita ikuti langkah-langkah berikut ini:
1. Saat ini fungsi create memiliki beberapa parameter, diantaranya adalah:
- title
- content
- status
- user_id
2. Parameter tersebut belum divalidasi, artinya semua nilai bisa kita masukan ke parameter
tersebut. Kalau kita coba untuk memberikan value ‘’ pada parameter tersebut, maka
aplikasi akan tetap melakukan INSERT ke db. Sekarang kita akan melakukan validasi
untuk parameter tersebut dengan rule seperti dibawah ini:
- title:
a. Tidak boleh kosong (required)
b. Harus memiliki minimum 5 karakter
- content:
a. Tidak boleh kosong (required)
b. Harus memiliki minimum 10 karakter
- status:
a. Tidak boleh kosong (required)
b. Hanya bisa diisi oleh dua value ini: ​published dan ​draft
- user_id:
a. Tidak boleh kosong (required)
b. Value yang di input harus ada di database table ​users
3. Itulah rule validasi yang akan kita implementasikan.
4. Kita akan melakukan pengecekan pada semua parameter, jika validasi lolos maka kita akan melanjutkan untuk INSERT ke database.
5. Jika validasi tidak lolos, kita akan memberikan response error dengan status code 400 Bad Request.

Selanjutnya buka PostController dan rubah method store menjadi seperti dibawah

$input = $request->all();
                $validationRules = [
                    'title'=>'required|min:5',
                    'content'=>'required|min:10',
                    'status'=>'required|in:draft,published',
                    'user_id'=>'required|exists:users,id',
                ];
                $validator = Validator::make($input, $validationRules);
                if ($validator->fails()) {
                    return response()->json($validator->errors(), 400);
                }
                $post = Post::create($input);
                return response()->json($post, 200);

Lalu check di postman dan isi parameternya null untuk mengecheck validasinya.


Untuk sekarang jika diisi null atau tidak berdasarkan ketentuan inputan akan di handle oleh validasi.


3. Error Handling

Saat ini kita hanya fokus pada positive case saja, kita belum memikirkan apabila ada negative
case. Kita tidak menghiraukan apakah request parameter yang dikirim sudah sesuai dengan
yang kita harapkan atau belum. Bagaimana seandainya user mengirim request dengan Method
yang salah? Bagaimana apabila ID yang dikirim tidak ada di database ketika melakukan
Update, Delete atau Show?
Pada dasarnya Lumen sudah menyediakan Error Handling untuk menangani masalah tersebut.
Sebagai contoh, jika kita mengakses ​http://localhost:8000/posts/1​ dengan method POST, maka
Lumen akan mengembalikan error response Invalid Method seperti gambar dibawah ini.



Kenapa ini terjadi? Karena di file routes/web.php, kita mendefinisikan url ini
http://localhost:8000/posts/1​ hanya menerima method GET, PUT dan DELETE.

Error response yang diberikan oleh Lumen secara default dalam bentuk HTML. Sekarang kita
akan melakukan Error handling dan memberikan response JSON.


Buka file app/Exceptions/Handler.php diatas Class definition tambahkan code dibawah
ini. Line 12-15.

lalu rubah code menjadi seperti dibawah


Lalu test di postman dan panggil endpoint POST ​http://localhost:8000/post/10​, maka tampilannya
akan seperti ini




dan panggil endpoint GET ​http://localhost:8000/post/10​, dengan ketentutan data tidak ada, maka tampilannya akan seperti ini




Labels: PHP
0 Komentar untuk "Membuat Service PHP Menggunakan Lumen Framework Part 4 Validation Dan Error Handling"

Back To Top