Lompat ke konten Lompat ke sidebar Lompat ke footer

Tutorial PHP #8: Membuat RESTful API CRUD Sederhana dengan PHP

Assalamualaikum Wr, Wb Sobat blogger semuanya! Setelah di tutorial sebelumnya kita sudah memahami dasar-dasar sintaks dan fungsi di PHP, kali ini kita akan langsung mempraktekkan sebuah studi kasus tingkat lanjut yang sangat krusial di era modern, yaitu Membuat RESTful API CRUD Sederhana dengan PHP.

Di dunia industri nyata, PHP tidak hanya dipakai untuk membuat tampilan website saja, melainkan sering digunakan sebagai Backend untuk menyediakan data bagi aplikasi Android, iOS, atau framework Frontend (seperti React atau Vue) melalui API. Yuk, gass kita bedah konsep dan cara pembuatannya!


💡 Apa itu RESTful API?

API (Application Programming Interface) adalah sebuah jembatan atau sistem perantara yang menghubungkan satu aplikasi dengan aplikasi lainnya, atau aplikasi dengan database. Dengan API, dua aplikasi yang menggunakan bahasa pemrograman berbeda (misalnya aplikasi web backend-nya PHP, lalu aplikasi mobile-nya Java/Kotlin) bisa saling bertukar data dengan lancar.

Saat menggunakan API, kita wajib membaca dokumentasi dari si pembuat API untuk mengetahui data apa saja yang bisa diakses dan metode apa yang digunakan. Format data yang dipertukarkan biasanya berbentuk XML atau JSON (JavaScript Object Notation). Metode HTTP standar yang paling sering digunakan dalam RESTful API adalah:

  • GET: Untuk mengambil/menampilkan data dari server.
  • POST: Untuk mengirim/memasukkan data baru ke server.
  • PUT / PATCH: Untuk memperbarui/mengubah data yang ada di server.
  • DELETE: For menghapus data di server.

🗄️ 1. Persiapan Database MySQL

Sebelum masuk ke kodingan PHP, silakan buka phpMyAdmin kalian, buat database baru bernama cruds, lalu masuk ke menu SQL dan jalankan perintah dump tabel mahasiswa berikut:

CREATE TABLE `mahasiswa` (
  `npm` varchar(10) NOT NULL,
  `nama` varchar(100) NOT NULL,
  `prodi` varchar(50) NOT NULL,
  `fakultas` varchar(50) NOT NULL,
  PRIMARY KEY (`npm`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `mahasiswa` (`npm`, `nama`, `prodi`, `fakultas`) VALUES
('1100001110', 'Dhani', 'Kedokteran', 'Dokter'),
('1201110012', 'Indra', 'Sistem Informasi', 'Teknik'),
('1500110001', 'Jhon', 'Teknik Informatika', 'Teknik');

👨‍💻 2. Membuat File Koneksi Database (connection.php)

Langkah pertama, buat folder project baru di dalam folder htdocs kalian (misal: htdocs/api_mahasiswa/). Buat file bernama connection.php untuk menjembatani kode PHP dengan MySQL menggunakan ekstensi MySQLi:

<?php
define('HOSTNAME', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DB_NAME', 'cruds');

$koneksi = new mysqli(HOSTNAME, USERNAME, PASSWORD, DB_NAME) or die("Koneksi ke Database Gagal!");
?>

📥 3. Fitur CREATE - Memasukkan Data (insert.php)

File ini berfungsi untuk menerima kiriman data dari client menggunakan metode POST, mengamankan inputan dari karakter berbahaya, lalu menyimpannya ke tabel database.

<?php
include_once('connection.php');

// Menangkap data inputan dan mengamankannya dari SQL Injection
$npm      = addslashes(htmlentities($_POST['npm']));
$nama     = addslashes(htmlentities($_POST['nama']));
$prodi    = addslashes(htmlentities($_POST['prodi']));
$fakultas = addslashes(htmlentities($_POST['fakultas']));

$insert    = "INSERT INTO mahasiswa(npm, nama, prodi, fakultas) VALUES ('$npm', '$nama', '$prodi', '$fakultas')";
$exeinsert = mysqli_query($koneksi, $insert);

$response = array();
if ($exeinsert) {
    $response['code'] = 1;
    $response['message'] = "Success! Data Inserted";
} else {
    $response['code'] = 0;
    $response['message'] = "Failed! Data Not Inserted";
}

// Mengubah array PHP menjadi format data JSON
echo json_encode($response);
?>

📤 4. Fitur READ - Menampilkan Data (view.php)

File ini bertugas mengambil seluruh data mahasiswa yang ada di dalam database, menyusunnya ke dalam bentuk array, lalu mengekspornya menjadi data mentah berformat JSON.

<?php
include_once('connection.php');

$query  = "SELECT * FROM mahasiswa";
$result = mysqli_query($koneksi, $query);

$array_data = array();
while ($baris = mysqli_fetch_assoc($result)) {
    $array_data[] = $baris;
}

// Menampilkan output berformat JSON
echo json_encode($array_data);
?>

Contoh Output Respon JSON di Browser:

[
  {"npm":"1100001110","nama":"Dhani","prodi":"Kedokteran","fakultas":"Dokter"},
  {"npm":"1201110012","nama":"Indra","prodi":"Sistem Informasi","fakultas":"Teknik"}
]

🔄 5. Fitur UPDATE - Mengubah Data (update.php)

File ini akan mengecek dulu apakah nomor NPM yang dikirimkan ada di database. Jika datanya terdeteksi, maka perintah query UPDATE akan langsung dieksekusi.

<?php
require_once('connection.php');

$npm      = addslashes(htmlentities($_POST['npm']));
$nama     = addslashes(htmlentities($_POST['nama']));
$prodi    = addslashes(htmlentities($_POST['prodi']));
$fakultas = addslashes(htmlentities($_POST['fakultas']));

$getdata = mysqli_query($koneksi, "SELECT * FROM mahasiswa WHERE npm='$npm'");
$rows    = mysqli_num_rows($getdata);

$update   = "UPDATE mahasiswa SET nama='$nama', prodi='$prodi', fakultas='$fakultas' WHERE npm='$npm'";
$exequery = mysqli_query($koneksi, $update);

$response = array();
if ($rows > 0) {
    if ($exequery) {
        $response['code'] = 1;
        $response['message'] = "Updated Success";
    } else {
        $response['code'] = 0;
        $response['message'] = "Updated Failed";
    }
} else {
    $response['code'] = 0;
    $response['message'] = "Updated Failed, No data selected";
}

echo json_encode($response);
?>

❌ 6. Fitur DELETE - Menghapus Data (delete.php)

Terakhir, file ini digunakan untuk menghapus baris data mahasiswa berdasarkan parameter nomor NPM yang dilemparkan oleh client.

<?php
include_once('connection.php');

$npm     = addslashes(htmlentities($_POST['npm']));
$getdata = mysqli_query($koneksi, "SELECT * FROM mahasiswa WHERE npm = '$npm'");
$rows    = mysqli_num_rows($getdata);

$delete    = "DELETE FROM mahasiswa WHERE npm = '$npm'";
$exedelete = mysqli_query($koneksi, $delete);

$response = array();
if ($rows > 0) {
    if ($exedelete) {
        $response['code'] = 1;
        $response['message'] = "Deleted Success";
    } else {
        $response['code'] = 0;
        $response['message'] = "Failed to Delete";
    }
} else {
    $response['code'] = 0;
    $response['message'] = "Failed to Delete, data Not Found";
}

echo json_encode($response);
?>

🛡️ Trik Keamanan Tambahan: Menggunakan .htaccess

Karena arsitektur API ini tidak menggunakan file utama index.php, saat folder project kalian diakses secara global, server web otomatis akan memperlihatkan seluruh daftar susunan file kodingan di atas secara telanjang. Hal ini tentu sangat berbahaya karena mempermudah kerja *hacker* untuk memetakan kelemahan sistem server.

Untuk mengamankannya, buatlah sebuah file bernama .htaccess di dalam folder project kalian, lalu ketikkan satu baris perintah berikut:

Options -Indexes

Perintah di atas berfungsi untuk mengunci folder indeks secara mutlak, sehingga jika ada orang luar yang iseng ingin mengintip isi folder server kalian, mereka akan langsung dihadang oleh pesan error Access Denied / Forbidden.

Kesimpulan & Cara Pengujian

Selesai sudah pembuatan sistem RESTful API CRUD sederhana kita! Untuk menguji performa endpoint API yang menggunakan metode POST, PUT, dan DELETE di atas, kalian tidak bisa hanya mengandalkan URL browser biasa. Sangat disarankan untuk menggunakan software tools penguji API populer seperti POSTMAN agar proses memasukkan parameter $_POST menjadi jauh lebih mudah dan praktis.

Sekian tutorial project backend kali ini, semoga bermanfaat! Jika ada bagian respons JSON yang memunculkan nilai 0 atau query database kalian macet, langsung saja konsultasikan kendala kalian melalui Kolom Komentar di bawah ya. Mari kita bedah bersama!

Wassalam.

Posting Komentar untuk "Tutorial PHP #8: Membuat RESTful API CRUD Sederhana dengan PHP"