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 modelMember
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 tabelmembers
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 kolomid
.- 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 tabelmembers
, 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)