Kita lanjutkan tutorial kita tenang Laravel, dan masih membahas tentang : Membuat Rest API Menggunakan LARAVEL 9.0. Pada part kali ini kita akan membahas bagaimana membuat custom api response agar lebih menarik.

Configurasi Response API dengan resource

Untuk mengkonfigurasi output dari api, atau mungkin kita ingin filter, data apa saja yang ingin kita tampilkan, kita bisa menggunakan resource. Silahakn temant eman semua mengetikan perintah dibawah ini membuat resource bernama PageResource

php artisan make:resource PageResource 

Maka nanti akan tergenerate folder resorce di \app\Http\Resources\ dan akan ada file \app\Http\Resources\PageResource.php.
Selanjutnya kita akan melakukan kodingan pada method toarray. Silahkan rubah method toarray menjadi seperti kode dibawah

public function toArray($request)
{
	// return parent::toArray($request);
	return [
		"id" => $this->id,
		"title" => $this->title,
	];
}

Dengan kode diatas, maka output hanya ada 2 item . yaitu id dan title saja. Akan tetapi ini belum selesai , kita harus mengedit di dalam controllernya untuk menggunakan resource ini. Jadi silahkan buka file \app\Http\Controllers\API\PageController.php . Rubah untuk method indexnya menjadi seperti kode dibawah ini

public function index()
{
	$data = Page::all();
	return \App\Http\Resources\PageResource::collection($data);
}

Custom Output

Terkadang kita ingin memberikan output json dengan json yang lebih complex. Semisal output seperti dibawah ini

{
  "response": true,
  "message": "Sukses Mendapatkan data",
  "data": [
    {
      "id": 1,
      "title": "Page1"
    }
  ]
}

Dari kode diatas output tidak hanya data saja, akan tetapi ada response, dan juga message yang ingin kita outputkan.Untuk kita kita perlu mengcustome data output tersebut. Maka kita bisa mengganti pada file PageController di method index dengan code berikut.

public function index()
{
	$data = Page::all();
	$output = \App\Http\Resources\PageResource::collection($data);
	$newoutput = [
		'response' => true,
		'message' => "Sukses Menampilkan data",
		'data' => $output,
	];
	return  response()->json($newoutput, 200);
}