RESTful API Dengan Controller di Laravel

Membuat RESTful API via controller adalah cara yang paling simple, mudah dan cepat. Karena semua proses pengambilan data dan converting Objek JSON maupun Array JSON dilakukan di satu tempat yaitu controller
Namun cara ini bukan best practice dari dokumentasi laravel saat membuat RESTful API. Karena saat adanya pengembangan yang kearah lebih kompleks ataupun perubahan. Maka akan banyak file yang perlu disesuiakan.
Oleh karenanya jika dirasa memang RESTful API yang dibuat bersifat sederhana dan bisa diperkirakan tidak dikembangkan ke arah yang lebih kompleks. Maka cara ini lebih efektif
Pertama-tama kita akan buat controller API . dengan mejalankan perintah dibawah ini :
php artisan make:controller PegawaiController --api
/* jika ingin meletakkan di subfolder "API" perintahnya adalah */
php artisan make:controller API/PegawaiController --api Perintah diatas akan membuat file PegawaiController.php di folder app/Http/Controllers . Secara default file tersebut berisi function :
- index()
- store(Request $request)
- show(string $id)
- update(Request $request, string $id)
- destroy(string $id)
Sebagai contoh kita akan mengisi function dari index untuk menampilkan seluruh pegawai
public function index()
{
$model = Pegawai::all();
return response()->json([
'status' => '200',
'data' => $model,
]);
}Kode diatas akan menghasilkan data yang sama dengan metode Resource Collection yaitu berupa Array JSON.
Untuk contoh kode di bawah ini akan menghasilkan data yang sama dengan metode Resource yaitu berupa Object JSON
public function index()
{
$model = Pegawai::find(1);
return response()->json([
'status' => '200',
'data' => $model,
]);
}Semoga Bermanfaat dan Terima Kasih...
Tambahan
Bagaimana cara menambahkan link pagination ?
Caranya dengan memanggil function paginate()
public function index()
{
$model = Pegawai::paginate(5);
return response()->json([
'status' => '200',
'data' => $model,
]);
}Jika kode diatas dijalankan akan menghasilkan data dibawah ini
{
"data": [
{
"id": 1,
"name": "Ahmad",
"email": "ahmad@mail.com",
"divisi" : {
"id": 5,
"name": "Quality Control"
}
},
{
"id": 2,
"name": "Yusuf",
"email": "yusuf@mail.com",
"divisi" : {
"id": 4,
"name": "Development"
}
},
{
"id": 1,
"name": "Sulaiman",
"email": "sulaiman@mail.com",
"divisi" : {
"id": 3,
"name": "Marketing"
}
}
],
"links": {
"first": "http://127.0.0.1:8000/api/kotak-semua?page=1",
"last": "http://127.0.0.1:8000/api/kotak-semua?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://127.0.0.1:8000/api/pegawai?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "http://127.0.0.1:8000/api/pegawai",
"per_page": 5,
"to": 4,
"total": 4
}
}dari output diatas terlihat ada dua key baru selain key ‘data’ yaitu :
- links : berisi link pagination
- meta : berisi informasi pagination