BELAJAR LARAVEL API DASAR

Day 4 — Menggunakan Resource & Resource Collection untuk Format Data API

Pelajari cara membuat format data API lebih rapi dan konsisten menggunakan Laravel API Resource agar mudah dikelola dan aman digunakan.

Author Avatar

Rizky Fauzi

Mentor Kompak Akademi

06 Oct 2025
5 menit membaca
Generative AI Illustration

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 :

  1. Apa itu Laravel API Resource dan kenapa penting.
  2. Bagaimana membuat Resource tunggal dan Resource
  3. Collection.Cara mengubah format JSON agar mudah dibaca dan profesional.
  4. 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 model Member.
  • ->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)

Rizky Fauzi

Tentang Penulis

Rizky Fauzi

Mentor Kompak Akademi

Baca artikel kami yang lainnya

Day 5 — Autentikasi API Menggunakan Laravel Sanctum
Belajar Laravel API dasar

Day 5 — Autentikasi API Menggunakan Laravel Sanctum

Kamu akan mempelajari cara membuat sistem login dan register berbasis API, serta mengamankan endpoint dengan Laravel Sanctum.

5 menit baca
06 Oct 2025
Day 3 — CRUD API: Create, Read, Update, Delete dengan Laravel
Belajar Laravel API dasar

Day 3 — CRUD API: Create, Read, Update, Delete dengan Laravel

Membangun API CRUD lengkap menggunakan Laravel, mulai dari membuat data baru hingga menghapus data, dengan pengujian sederhana menggunakan Postman.

5 menit baca
06 Oct 2025
Day 1 — Pengenalan API &amp; Persiapan Project Laravel
Belajar Laravel API dasar

Day 1 — Pengenalan API &amp; Persiapan Project Laravel

Pada tahap ini kamu akan mengenal dasar konsep API dan bagaimana cara kerjanya dalam pertukaran data antar aplikasi. Selain itu, kamu juga akan menyiapkan project Laravel dari awal hingga siap digunakan untuk membangun API di tahap berikutnya.

5 menit baca
06 Oct 2025

Ingin Belajar Lebih Dalam tentang AI?

Daftar kursus kami dan mulai perjalanan Anda menuju karir di bidang AI