REST API (Representational State Transfer Application Programming Interface) adalah salah satu cara paling populer untuk membangun komunikasi antara berbagai sistem dalam aplikasi modern. Dengan REST API, kamu dapat menghubungkan aplikasi web, mobile, dan bahkan perangkat IoT secara efisien. Artikel ini akan membahas cara membuat REST API sederhana menggunakan PHP dan MySQL.
1. Persiapan Database
Langkah pertama adalah menyiapkan database. Kita akan membuat database rest_api_demo
dengan sebuah tabel bernama users
.
CREATE DATABASE rest_api_demo;
USE rest_api_demo;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Setelah itu, masukkan beberapa data dummy:
INSERT INTO users (name, email) VALUES
('Budi', 'budi@example.com'),
('Siti', 'siti@example.com');
2. Struktur Folder Project
Buat struktur folder seperti berikut:
rest-api/
├── config/
│ └── database.php
├── api/
│ ├── index.php
│ └── users.php
└── .htaccess
3. Koneksi ke Database
Buat file database.php
di dalam folder config/
:
<?php
class Database {
private $host = "localhost";
private $db_name = "rest_api_demo";
private $username = "root";
private $password = "";
public $conn;
public function connect() {
$this->conn = null;
try {
$this->conn = new PDO(
"mysql:host=" . $this->host . ";dbname=" . $this->db_name,
$this->username,
$this->password
);
$this->conn->exec("set names utf8");
} catch(PDOException $exception) {
echo "Connection error: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
4. Menangani Request API
Buat file users.php
di folder api/
. File ini akan menangani permintaan GET untuk mengambil data user.
<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type");
include_once "../config/database.php";
$db = new Database();
$conn = $db->connect();
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
$query = "SELECT * FROM users";
$stmt = $conn->prepare($query);
$stmt->execute();
$users = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
extract($row);
$users[] = [
"id" => $id,
"name" => $name,
"email" => $email,
"created_at" => $created_at
];
}
echo json_encode($users);
break;
case 'POST':
$data = json_decode(file_get_contents("php://input"));
if (!empty($data->name) && !empty($data->email)) {
$query = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($query);
$stmt->bindParam(':name', $data->name);
$stmt->bindParam(':email', $data->email);
if ($stmt->execute()) {
echo json_encode(["message" => "User berhasil ditambahkan"]);
} else {
echo json_encode(["message" => "Gagal menambahkan user"]);
}
} else {
echo json_encode(["message" => "Data tidak lengkap"]);
}
break;
case 'PUT':
$data = json_decode(file_get_contents("php://input"));
if (!empty($data->id) && (!empty($data->name) || !empty($data->email))) {
$fields = [];
if (!empty($data->name)) {
$fields[] = "name = :name";
}
if (!empty($data->email)) {
$fields[] = "email = :email";
}
$query = "UPDATE users SET " . implode(", ", $fields) . " WHERE id = :id";
$stmt = $conn->prepare($query);
$stmt->bindParam(':id', $data->id);
if (!empty($data->name)) $stmt->bindParam(':name', $data->name);
if (!empty($data->email)) $stmt->bindParam(':email', $data->email);
if ($stmt->execute()) {
echo json_encode(["message" => "User berhasil diperbarui"]);
} else {
echo json_encode(["message" => "Gagal memperbarui user"]);
}
} else {
echo json_encode(["message" => "Data tidak lengkap untuk update"]);
}
break;
case 'DELETE':
$data = json_decode(file_get_contents("php://input"));
if (!empty($data->id)) {
$query = "DELETE FROM users WHERE id = :id";
$stmt = $conn->prepare($query);
$stmt->bindParam(':id', $data->id);
if ($stmt->execute()) {
echo json_encode(["message" => "User berhasil dihapus"]);
} else {
echo json_encode(["message" => "Gagal menghapus user"]);
}
} else {
echo json_encode(["message" => "ID diperlukan untuk menghapus user"]);
}
break;
default:
http_response_code(405);
echo json_encode(["message" => "Metode tidak diizinkan"]);
break;
}
5. Routing dengan index.php
Buat file index.php
untuk menangani routing API:
<?php
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
case '/api/users':
require __DIR__ . '/users.php';
break;
default:
http_response_code(404);
echo json_encode(["message" => "Endpoint not found"]);
break;
}
?>
6. Konfigurasi .htaccess
Untuk mengarahkan semua request ke index.php
, buat file .htaccess
di root folder:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ api/index.php [QSA,L]
Pastikan server Apache mendukung mod_rewrite.
7. Uji Coba API
Jalankan server lokal (misalnya XAMPP atau Laragon), lalu akses:
http://localhost/rest-api/api/users
Hasilnya akan berupa data dalam format JSON seperti ini:
[
{
"id": 1,
"name": "Budi",
"email": "budi@example.com",
"created_at": "2025-05-13 10:23:00"
},
]
Penutup
Membuat REST API dengan PHP dan MySQL tidaklah rumit. Dengan memahami konsep dasar dan mengikuti langkah-langkah di atas, kamu dapat mengembangkan API untuk berbagai kebutuhan, seperti aplikasi mobile atau dashboard web. Ohiya jangan lupa untuk post data nya menggunakan tipe data JSON ya pada contoh ini.