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.

Author Avatar

Rizky Fauzi

Mentor Kompak Akademi

06 Oct 2025
10 menit membaca
Generative AI Illustration

Hallo teman-teman 👋
Selamat datang di artikel ketiga 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 :

  • Cara membuat model & migration untuk table users
  • Cara menghubungkan Laravel ke database MySQL.
  • Cara membuat API untuk menjalankan fungsi CRUD (Create, Read, Update, Delete).
  • Cara menguji endpoint menggunakan Postman.

Setelah menyelesaikan ini, asumsi nya kamu akan punya API yang bisa menyimpan dan membaca data sungguhan dari database.

Mari kita mulai perjalanan di day ke-3 ini, semangat 🥳

1. Apa Itu CRUD?

Secara singkat CRUD adalah singkatan dari Create, Read, Update & Delete yang kalau di jabarkan akan seperti ini :

  • Create → Berfungsi untuk menambah data baru
  • Read → Berfungsi untuk membaca data
  • Update → Berfungsi untuk mengubah data
  • Delete → Berfungsi untuk menghapus data

Keempat operasi sederhana ini adalah dasar dari hampir semua aplikasi yang sekarang ada di internet — entah itu marketplace, dashboard, blog, atau sistem blog yang digunakan oleh Kompak-Akademi, menarik kan ? 🤔

2. Membuat Database dan Koneksi

Pastikan bahwa kamu sudah punya database di MySQL, misalnya laravel_api. Kalau misalkan belum, kamu bisa buat dengan command :

CREATE DATABASE laravel_api;

Kemudian buka file .env kamu dan pastikan untuk isi nya itu sama dengan file .env di bawah ini :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=

Setelah itu silahkan simpan dan tutup file .env nya karena kita tidak akan menyentuhnya lagi.

3. Membuat Model dan Migration

Sekarang kita akan membuat sebuah model User versi kita sendiri.
Laravel sebenarnya sudah punya model bawaan User, tapi agar belajar nya lebih jelas, kita buat model baru bernama Member.

Ketik di terminal kamu :

php artisan make:model Member -m

Perintah -m artinya kamu sekalian membuat file migration nya juga
Setelah itu, buka file :

database/migrations/xxxx_xx_xx_create_members_table.php

Setelah itu, ubah isi nya menjadi seperti kode di bawah ini :

public function up()
{
    Schema::create('members', function (Blueprint $table) {
        $table->id();
        $table->string('nama');
        $table->string('email')->unique();
        $table->string('telepon')->nullable();
        $table->timestamps();
    });
}

Lalu jalankan migration nya

php artisan migrate

Kalau berhasil, maka akan muncul table members di dalam database kamu, silahkan coba kamu check. Kalau belum ada silahkan ulangi langkah ini sehingga berhasil yak 😄

4. Menyiapkan Controller CRUD

Setelah itu kita akan membuat controller untuk menangani operasi CRUD nya, silahkan ketikkan perintah berikut ini di terminal kamu :

php artisan make:controller Api/MemberController --api

Sekarang buka file nya di app/Http/Controllers/Api/MemberController.php lalu ubah menjadi seperti kode di bawah ini :

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Member;

class MemberController extends Controller
{
    // CREATE - Tambah Data
    public function store(Request $request)
    {
        $validated = $request->validate([
            'nama' => 'required|string|max:255',
            'email' => 'required|email|unique:members',
            'telepon' => 'nullable|string|max:20'
        ]);

        $member = Member::create($validated);

        return response()->json([
            'success' => true,
            'message' => 'Data member berhasil ditambahkan',
            'data' => $member
        ], 201);
    }

    // READ - Tampilkan Semua Data
    public function index()
    {
        $members = Member::all();

        return response()->json([
            'success' => true,
            'data' => $members
        ]);
    }

    // READ - Tampilkan Data Berdasarkan ID
    public function show($id)
    {
        $member = Member::find($id);

        if (!$member) {
            return response()->json([
                'success' => false,
                'message' => 'Member tidak ditemukan'
            ], 404);
        }

        return response()->json([
            'success' => true,
            'data' => $member
        ]);
    }

    // UPDATE - Ubah Data
    public function update(Request $request, $id)
    {
        $member = Member::find($id);

        if (!$member) {
            return response()->json([
                'success' => false,
                'message' => 'Member tidak ditemukan'
            ], 404);
        }

        $validated = $request->validate([
            'nama' => 'required|string|max:255',
            'email' => 'required|email|unique:members,email,' . $id,
            'telepon' => 'nullable|string|max:20'
        ]);

        $member->update($validated);

        return response()->json([
            'success' => true,
            'message' => 'Data member berhasil diperbarui',
            'data' => $member
        ]);
    }

    // DELETE - Hapus Data
    public function destroy($id)
    {
        $member = Member::find($id);

        if (!$member) {
            return response()->json([
                'success' => false,
                'message' => 'Member tidak ditemukan'
            ], 404);
        }

        $member->delete();

        return response()->json([
            'success' => true,
            'message' => 'Data member berhasil dihapus'
        ]);
    }
}

Kita akan jelaskan kode nya detail per-fungsi ya, jangan kamu skip ya penjelasan ini karena ini penting 📝

Penjelasan Kode

1. Fungsi store() — CREATE (Menambah Data Baru)

public function store(Request $request)
{
    $validated = $request->validate([
        'nama' => 'required|string|max:255',
        'email' => 'required|email|unique:members',
        'telepon' => 'nullable|string|max:20'
    ]);

    $member = Member::create($validated);

    return response()->json([
        'success' => true,
        'message' => 'Data member berhasil ditambahkan',
        'data' => $member
    ], 201);
}

Penjelasan :

  • Request $request → berisi semua data yang dikirim dari client (misal lewat Postman atau frontend).
  • $request->validate([...]) → melakukan validasi otomatis agar data yang dikirim sesuai aturan :
    • nama wajib diisi (required) dan berupa teks (string).
    • email wajib diisi, berbentuk email valid, dan unik di tabel members.
    • telepon boleh kosong (nullable).
  • Member::create($validated) → menyimpan data ke database dengan menggunakan mass assignment.
    Pastikan bahwa model Member punya properti $fillable di dalamnya, kalau belum kamu bisa copy kode di bawah ini :
protected $fillable = ['nama', 'email', 'telepon'];
  • response()->json([...], 201) → mengirim respons JSON ke client dengan status 201 (Created).

Output Contoh

{
  "success": true,
  "message": "Data member berhasil ditambahkan",
  "data": {
    "id": 1,
    "nama": "Syafiq Rizky",
    "email": "syafiq@example.com",
    "telepon": "08123456789"
  }
}

2. Fungsi index() — READ (Menampilkan Semua Data)

public function index()
{
    $members = Member::all();

    return response()->json([
        'success' => true,
        'data' => $members
    ]);
}

Penjelasan :

  • Member::all() → mengambil semua data dari tabel members menggunakan Eloquent ORM.
  • Data yang diambil berupa array of object (kumpulan baris dari database).
  • Hasilnya dikirim kembali dalam format JSON.

Output Contoh :

{
  "success": true,
  "data": [
    {
      "id": 1,
      "nama": "Syafiq Rizky",
      "email": "syafiq@example.com",
      "telepon": "08123456789"
    },
    {
      "id": 2,
      "nama": "Dina Rahma",
      "email": "dina@example.com",
      "telepon": "0812121212"
    }
  ]
}

Fungsi ini biasanya di pakai untuk halaman daftar data atau list view

3. Fungsi show() — READ (Menampilkan Data Berdasarkan ID)

public function show($id)
{
    $member = Member::find($id);

    if (!$member) {
        return response()->json([
            'success' => false,
            'message' => 'Member tidak ditemukan'
        ], 404);
    }

    return response()->json([
        'success' => true,
        'data' => $member
    ]);
}

Penjelasan :

  • Member::find($id) → mencari data berdasarkan kolom id.
  • Jika tidak ditemukan ($member bernilai null), maka kembalikan status 404 (Not Found).
  • Jika ditemukan, kembalikan data tersebut dalam JSON.

Output Saat Data Ditemukan :

{
  "success": true,
  "data": {
    "id": 1,
    "nama": "Syafiq Rizky",
    "email": "syafiq@example.com",
    "telepon": "08123456789"
  }
}

Output Saat Data Tidak Ada :

{
  "success": false,
  "message": "Member tidak ditemukan"
}

4. Fungsi update() — UPDATE (Mengubah Data)

public function update(Request $request, $id)
{
    $member = Member::find($id);

    if (!$member) {
        return response()->json([
            'success' => false,
            'message' => 'Member tidak ditemukan'
        ], 404);
    }

    $validated = $request->validate([
        'nama' => 'required|string|max:255',
        'email' => 'required|email|unique:members,email,' . $id,
        'telepon' => 'nullable|string|max:20'
    ]);

    $member->update($validated);

    return response()->json([
        'success' => true,
        'message' => 'Data member berhasil diperbarui',
        'data' => $member
    ]);
}

Penjelasan :

  • Pertama, data dicari berdasarkan ID.
  • Jika data tidak ada → kirim respons 404.
  • Kalau ada, data baru divalidasi dengan aturan:
    • Email harus unik, kecuali milik ID itu sendiri.
    • Ini dijelaskan lewat 'unique:members,email,' . $id Artinya: "email harus unik di tabel members, tapi abaikan email milik ID yang sedang diubah."
  • $member->update($validated) → memperbarui data di database.
  • Mengembalikan JSON yang berisi data terbaru.

Output Contoh :

{
  "success": true,
  "message": "Data member berhasil diperbarui",
  "data": {
    "id": 1,
    "nama": "Syafiq R. Fauzi",
    "email": "syafiqrf@example.com",
    "telepon": "08123456789"
  }
}

5. Fungsi destroy() — DELETE (Menghapus Data)

public function destroy($id)
{
    $member = Member::find($id);

    if (!$member) {
        return response()->json([
            'success' => false,
            'message' => 'Member tidak ditemukan'
        ], 404);
    }

    $member->delete();

    return response()->json([
        'success' => true,
        'message' => 'Data member berhasil dihapus'
    ]);
}

Penjelasan :

  • Member::find($id) → mencari data berdasarkan ID.
  • Kalau data tidak ditemukan → kirim status 404.
  • Kalau ada → jalankan $member->delete() untuk menghapus data dari database.
  • Kembalikan respons JSON sukses tanpa perlu menampilkan data lagi.

Output Contoh :

{
  "success": true,
  "message": "Data member berhasil dihapus"
}

Kesimpulan Singkat Kesimpulan singkat nya itu pada table di bawah ini :

Fungsi Tugas HTTP Method URL Contoh Status Code
index() Menampilkan semua data GET /api/members 200
show() Menampilkan satu data GET /api/members/{id} 200 / 404
store() Menambah data baru POST /api/members 201
update() Mengubah data PUT /api/members/{id} 200 / 404
destroy() Menghapus data DELETE /api/members/{id} 200 / 404

5. Menambahkan Route untuk CRUD

Sekarang buka file routes/api.php dan tambahkan :

use App\Http\Controllers\Api\MemberController;

Route::get('/members', [MemberController::class, 'index']);     // Read All
Route::get('/members/{id}', [MemberController::class, 'show']); // Read by ID
Route::post('/members', [MemberController::class, 'store']);    // Create
Route::put('/members/{id}', [MemberController::class, 'update']); // Update
Route::delete('/members/{id}', [MemberController::class, 'destroy']); // Delete

6. Menguji API Menggunakan Postman

a. Membuat Data (POST)

Endpoint :

POST http://127.0.0.1:8000/api/members

Body ( JSON )

{
  "nama": "Syafiq Rizky",
  "email": "syafiq@example.com",
  "telepon": "08123456789"
}

Output Response

{
  "success": true,
  "message": "Data member berhasil ditambahkan",
  "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"
  }
}

b. Menampilkan Semua Data (GET)

Endpoint

GET http://127.0.0.1:8000/api/members

Output Response

{
  "success": true,
  "data": [
    {
      "id": 1,
      "nama": "Syafiq Rizky",
      "email": "syafiq@example.com",
      "telepon": "08123456789"
    }
  ]
}

c. Menampilkan Data Berdasarkan ID (GET)

Endpoint

GET http://127.0.0.1:8000/api/members/1

Output Response

{
  "success": true,
  "data": {
    "id": 1,
    "nama": "Syafiq Rizky",
    "email": "syafiq@example.com",
    "telepon": "08123456789"
  }
}

d. Mengubah Data (PUT)

Endpoint

PUT http://127.0.0.1:8000/api/members/1

Body ( JSON )

{
  "nama": "Syafiq R. Fauzi",
  "email": "syafiqrf@example.com",
  "telepon": "08123456789"
}

Output Response

{
  "success": true,
  "message": "Data member berhasil diperbarui",
  "data": {
    "id": 1,
    "nama": "Syafiq R. Fauzi",
    "email": "syafiqrf@example.com",
    "telepon": "08123456789"
  }
}

e. Menghapus Data (DELETE)

Endpoint

DELETE http://127.0.0.1:8000/api/members/1

Output Response

{
  "success": true,
  "message": "Data member berhasil dihapus"
}

7. Validasi dan Error Handling

Laravel memudahkan kamu untuk bisa menambahkan validasi langsung di controller-nya.
Kalau user mengirim request tanpa field wajib seperti nama, maka Laravel otomatis akan memberi respon seperti :

{
  "message": "The given data was invalid.",
  "errors": {
    "nama": [
      "The nama field is required."
    ]
  }
}

Jadi kamu tidak perlu menulis pengecekan manual — cukup pakai $request->validate().

Kesimpulan

Huft, sudah jauh & banyak sekali yang kita pelajari hari ini ya, semoga kamu tetap semangat selalu yak 🥳

Namun aku mau ngasih tau, bahwa kamu hari ini sudah belajar :

  • Cara membuat Model dan Migration
  • Cara menggunakan Eloquent ORM
  • Cara implementasi CRUD API dengan response JSON
  • Cara pengujian endpoint menggunakan Postman

Mulai dari sekarang, kamu sudah bisa membuat back-end API sederhana untuk aplikasi mobile, website atau dashboard admin kamu mungkin ya.

Selamat ✨

Sampai jumpa di artikel selanjut nya 👋

Kalau ada pertanyaan silahkan bisa join ke komunitas kita baik di discord ataupun di telegram group :

Cara terbaik untuk memprediksi masa depan adalah dengan menciptakannya. — Alan Kay (Pionir Object-Oriented Programming & GUI)

Rizky Fauzi

Tentang Penulis

Rizky Fauzi

Mentor Kompak Akademi

Baca artikel kami yang lainnya

Day 4 — Menggunakan Resource &amp; Resource Collection untuk Format Data API
Belajar Laravel API dasar

Day 4 — Menggunakan Resource &amp; 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.

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
Day 2 — Membuat Route, Controller, dan Response JSON
Belajar Laravel API dasar

Day 2 — Membuat Route, Controller, dan Response JSON

Belajar membuat endpoint pertama di Laravel menggunakan Route dan Controller, serta mengembalikan data dalam format JSON yang bisa diakses oleh aplikasi lain

5 menit baca
06 Oct 2025

Ingin Belajar Lebih Dalam tentang AI?

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