Hallo teman-teman 👋
Selamat datang di artikel keempat di series belajar Laravel API by kompak-akademi. Pada series kali ini kita akan melanjutkan untuk pembuatan API menggunakan framework laravel.
Pada hari ini kita akan belajar tentang :
- Apa itu Laravel API Resource dan kenapa penting.
- Bagaimana membuat Resource tunggal dan Resource
- Collection.Cara mengubah format JSON agar mudah dibaca dan profesional.
- Mengintegrasikan Resource ke dalam API CRUD yang sudah kamu buat di Day 3.
Dengan memahami konsep ini, API kamu tidak hanya berfungsi, tapi juga terbaca dan mudah dikonsumsi oleh frontend seperti React, Flutter, atau Vue.
1. Masalah Umum API Tanpa Resource
Kalau kamu perhatikan dari Day 3, setiap kali kita memanggil endpoint /api/members
, hasilnya seperti ini :
{
"id": 1,
"nama": "Syafiq Rizky",
"email": "syafiq@example.com",
"telepon": "08123456789",
"created_at": "2025-10-06T13:20:00.000000Z",
"updated_at": "2025-10-06T13:20:00.000000Z"
}
Kelihatannya sudah bagus, tapi dalam API produksi biasanya kita ingin hasil yang :
- Konsisten antar endpoint.
- Rapi dengan struktur yang jelas.
- Tidak menampilkan field yang tidak perlu seperti
updated_at
(kalau tidak dibutuhkan). - Mudah dimodifikasi di masa depan.
Untuk itulah Laravel menyediakan API Resource.
2. Apa Itu API Resource?
API Resource di Laravel berfungsi sebagai “lapisan transformasi” data sebelum dikirim ke client.
Ia mengambil data dari Model, lalu menentukan data mana yang akan ditampilkan dan dalam format seperti apa.
Jadi kalau Controller ibarat dapur, Resource ini seperti chef plating — menyajikan makanan agar tampil cantik di meja.
3. Membuat Resource
Buka terminal dan jalankan perintah :
php artisan make:resource MemberResource
Perintah ini akan membuat file di dalam folder app/Http/Resources/MemberResource.php
buka file tersebut dan ubah isinya menjadi seperti kode di bawah ini :
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'nama' => $this->nama,
'email' => $this->email,
'telepon' => $this->telepon,
'terdaftar_pada' => $this->created_at->format('d M Y H:i'),
];
}
}
Penjelasan :
toArray()
adalah fungsi yang menentukan apa yang akan dikirim ke client.$this->id
dan seterusnya adalah field dari modelMember
.->format('d M Y H:i')
digunakan agar tanggal lebih enak dibaca.- Kamu bebas menghapus, menambah, atau mengubah field sesuai kebutuhan.
4. Menggunakan Resource di Controller
Sekarang kita ubah Controller dari Day 3 agar menggunakan Resource ini.
Buka file app/Http/Controllers/Api/MemberController.php
ubah bagian index()
dan show()
seperti ini :
use App\Http\Resources\MemberResource;
// ...
public function index()
{
$members = Member::all();
return response()->json([
'success' => true,
'data' => MemberResource::collection($members)
]);
}
public function show($id)
{
$member = Member::find($id);
if (!$member) {
return response()->json([
'success' => false,
'message' => 'Member tidak ditemukan'
], 404);
}
return new MemberResource($member);
}
Penjelasan :
MemberResource::collection($members)
digunakan untuk mengubah kumpulan data (Collection).new MemberResource($member)
digunakan untuk mengubah satu data tunggal.- Laravel akan otomatis mengubahnya menjadi JSON yang sudah diformat sesuai
toArray()
.
5. Hasilnya di Postman
Coba akses kembali :
GET http://127.0.0.1:8000/api/members
Sekarang hasilnya akan menjadi seperti ini :
{
"success": true,
"data": [
{
"id": 1,
"nama": "Syafiq Rizky",
"email": "syafiq@example.com",
"telepon": "08123456789",
"terdaftar_pada": "06 Oct 2025 13:20"
},
{
"id": 2,
"nama": "Dina Rahma",
"email": "dina@example.com",
"telepon": "0812121212",
"terdaftar_pada": "06 Oct 2025 13:22"
}
]
}
Dan kalau kamu memanggil satu data :
GET http://127.0.0.1:8000/api/members/1
Hasilnya :
{
"id": 1,
"nama": "Syafiq Rizky",
"email": "syafiq@example.com",
"telepon": "08123456789",
"terdaftar_pada": "06 Oct 2025 13:20"
}
Lebih bersih dan manusiawi, bukan?
6. Menambahkan Custom Field
Resource juga bisa menambahkan field baru yang tidak ada di database.
Contoh : kamu ingin menampilkan salam otomatis.
Tambahkan ke MemberResource
:
return [
'id' => $this->id,
'nama' => $this->nama,
'email' => $this->email,
'telepon' => $this->telepon,
'terdaftar_pada' => $this->created_at->format('d M Y H:i'),
'sapaan' => 'Halo, ' . $this->nama . '!'
];
Sekarang API kamu akan mengembalikan tambahan seperti ini :
{
"id": 1,
"nama": "Syafiq Rizky",
"email": "syafiq@example.com",
"telepon": "08123456789",
"terdaftar_pada": "06 Oct 2025 13:20",
"sapaan": "Halo, Syafiq Rizky!"
}
Menarik kan? Ini sangat berguna kalau kamu ingin menampilkan field gabungan atau hasil perhitungan tanpa mengubah database.
7. Membuat Resource Collection Terpisah
Kalau kamu ingin kontrol penuh untuk daftar data (bukan satuan), kamu bisa buat Resource Collection.
Buat file baru lewat terminal :
php artisan make:resource MemberCollection
Lalu ubah isi app/Http/Resources/MemberCollection.php
seperti ini :
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
class MemberCollection extends ResourceCollection
{
public function toArray(Request $request): array
{
return [
'success' => true,
'total' => $this->count(),
'data' => $this->collection
];
}
}
Kemudian ubah di MemberController
:
use App\Http\Resources\MemberCollection;
public function index()
{
return new MemberCollection(Member::all());
}
Sekarang hasil endpoint api/members/
akan menjadi :
{
"success": true,
"total": 2,
"data": [
{
"id": 1,
"nama": "Syafiq Rizky",
"email": "syafiq@example.com",
"telepon": "08123456789",
"created_at": "2025-10-06T13:20:00.000000Z",
"updated_at": "2025-10-06T13:20:00.000000Z"
},
{
"id": 2,
"nama": "Dina Rahma",
"email": "dina@example.com",
"telepon": "0812121212",
"created_at": "2025-10-06T13:22:00.000000Z",
"updated_at": "2025-10-06T13:22:00.000000Z"
}
]
}
Dengan cara ini kamu bisa dengan mudah menambahkan metadata seperti :
- Total data (
$this->count()
) - Pagination (
$this->currentPage()
,$this->lastPage()
) - Link navigasi (
$this->links()
)
Kesimpulan
Hari ini kamu sudah mempelajari bagaimana :
- Menggunakan Laravel API Resource untuk merapikan data JSON.
- Mengubah format data agar lebih profesional.
- Membuat Resource Collection untuk menampilkan daftar data lengkap.
- Menambahkan custom field tanpa mengubah database.
Dengan Resource, API kamu kini siap digunakan oleh frontend apa pun — dari web hingga mobile.
Kesederhanaan adalah jiwa dari efisiensi. — Austin Freeman (Penulis dan Filsuf Teknologi)