Selamat datang di part 44 dari seri tutorial pemrograman PHP! Pada bagian ini, kita akan mempelajari cara membangun REST API sederhana menggunakan PHP. REST API (Representational State Transfer Application Programming Interface) adalah cara standar untuk membangun aplikasi web yang dapat berkomunikasi dengan aplikasi lain melalui protokol HTTP. Ini adalah topik tingkat menengah yang sangat penting untuk pengembangan web modern.
Prasyarat:
Bayangkan REST API seperti pelayan di restoran. Klien (aplikasi lain) mengirim permintaan (misalnya, memesan makanan), dan server (API) memberikan respons (misalnya, makanan yang dipesan). REST API bekerja dengan sumber daya (resources), seperti pengguna, produk, atau postingan. Setiap sumber daya memiliki URI (Uniform Resource Identifier) yang unik, seperti '/users' atau '/products/123'. Metode HTTP (GET, POST, PUT, DELETE) digunakan untuk melakukan operasi pada sumber daya tersebut.
Mari kita bangun REST API sederhana untuk mengelola daftar pengguna. Kita akan membuat endpoint untuk mengambil daftar pengguna (GET /users), menambahkan pengguna baru (POST /users), memperbarui pengguna (PUT /users/{id}), dan menghapus pengguna (DELETE /users/{id}).
Buat struktur proyek seperti berikut:
rest_api/
├── index.php
├── .htaccess (untuk Apache)
└── users.php
.htaccess (untuk Apache)Jika Anda menggunakan Apache, buat file .htaccess untuk mengarahkan semua permintaan ke index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
users.phpBuat file users.php untuk menangani logika CRUD (Create, Read, Update, Delete) untuk pengguna. Kita akan simpan data pengguna dalam array sederhana untuk contoh ini.
['id' => 1, 'name' => 'John Doe', 'email' => 'john.doe@example.com'],
2 => ['id' => 2, 'name' => 'Jane Smith', 'email' => 'jane.smith@example.com'],
];
function getUsers() {
global $users;
return $users;
}
function getUser($id) {
global $users;
return $users[$id] ?? null;
}
function createUser($data) {
global $users;
$newId = max(array_keys($users)) + 1;
$data['id'] = $newId;
$users[$newId] = $data;
return $data;
}
function updateUser($id, $data) {
global $users;
if (isset($users[$id])) {
$users[$id] = array_merge($users[$id], $data);
return $users[$id];
} else {
return null;
}
}
function deleteUser($id) {
global $users;
if (isset($users[$id])) {
unset($users[$id]);
return true;
} else {
return false;
}
}
?>
index.phpFile ini akan menjadi titik masuk (entry point) untuk semua permintaan API. Di sini, kita akan memeriksa metode HTTP dan URI yang diminta, dan memanggil fungsi yang sesuai dari users.php.
'User not found']);
}
} else {
echo json_encode(array_values(getUsers()));
}
break;
case 'POST':
$data = json_decode(file_get_contents('php://input'), true);
$newUser = createUser($data);
echo json_encode($newUser);
break;
case 'PUT':
if ($id) {
$data = json_decode(file_get_contents('php://input'), true);
$updatedUser = updateUser($id, $data);
if ($updatedUser) {
echo json_encode($updatedUser);
} else {
http_response_code(404);
echo json_encode(['message' => 'User not found']);
}
} else {
http_response_code(400);
echo json_encode(['message' => 'User ID required for PUT request']);
}
break;
case 'DELETE':
if ($id) {
if (deleteUser($id)) {
echo json_encode(['message' => 'User deleted']);
} else {
http_response_code(404);
echo json_encode(['message' => 'User not found']);
}
} else {
http_response_code(400);
echo json_encode(['message' => 'User ID required for DELETE request']);
}
break;
default:
http_response_code(405);
echo json_encode(['message' => 'Method not allowed']);
}
break;
default:
http_response_code(404);
echo json_encode(['message' => 'Resource not found']);
}
?>
Penjelasan Kode:
require 'users.php';: Memasukkan file users.php yang berisi fungsi-fungsi untuk mengelola data pengguna.header('Content-Type: application/json');: Mengatur header respons HTTP ke application/json, sehingga klien tahu bahwa respons yang diterima adalah data JSON.$_SERVER['REQUEST_METHOD'];: Mendapatkan metode HTTP yang digunakan dalam permintaan (GET, POST, PUT, DELETE).$_SERVER['REQUEST_URI'];: Mendapatkan URI yang diminta.explode('/', trim($uri, '/'));: Memecah URI menjadi bagian-bagian berdasarkan tanda '/', dan menghapus tanda '/' di awal dan akhir URI.file_get_contents('php://input'): Mendapatkan data yang dikirim dalam body permintaan (biasanya untuk POST dan PUT).json_decode(..., true): Mengubah string JSON menjadi array asosiatif PHP.json_encode(...): Mengubah array asosiatif PHP menjadi string JSON.http_response_code(...): Mengatur kode status HTTP respons.Tingkatkan API ini dengan menambahkan validasi input untuk memastikan data yang diterima valid. Misalnya, pastikan bahwa email memiliki format yang benar dan nama tidak kosong.
Selanjutnya, tambahkan fungsionalitas untuk menyimpan data pengguna ke database MySQL, bukan hanya dalam array.
Sebagai tantangan ekstra, implementasikan autentikasi dasar menggunakan username dan password.
Karena di Part 43 kita telah membahas 'PHP Generators untuk Iterasi Memori-Efisien', cobalah implementasi REST API ini dengan Generator untuk data set yang besar agar meminimalisir penggunaan memori!