Pada API modern, middleware digunakan untuk menjalankan proses tertentu sebelum request masuk ke endpoint utama. Middleware biasanya digunakan untuk autentikasi, validasi token, pengecekan role, dan sanitasi data. Konsep ini umum dalam framework seperti Laravel, tetapi dapat dibuat dengan mudah menggunakan PHP Native.
1. Apa Itu Middleware?
Middleware adalah lapisan perantara antara request dan endpoint. Contohnya:
- Cek API Key
- Validasi JWT
- Validasi input
- Rate limiting
- Logging request
2. Struktur Middleware Sederhana
Contoh struktur folder:
/api
/middleware
AuthMiddleware.php
ApiKeyMiddleware.php
/endpoints
user.php
index.php
3. Contoh Middleware Autentikasi
Middleware ini mengecek apakah header Authorization berisi token valid:
class AuthMiddleware {
public static function handle() {
$headers = getallheaders();
if (!isset($headers['Authorization'])) {
http_response_code(401);
echo json_encode(['error' => 'Token tidak ditemukan']);
exit;
}
$token = str_replace('Bearer ', '', $headers['Authorization']);
if ($token !== "TOKEN-RAHASIA") {
http_response_code(401);
echo json_encode(['error' => 'Token tidak valid']);
exit;
}
}
}
4. Memanggil Middleware di Endpoint
Pastikan middleware dieksekusi sebelum script utama berjalan:
require_once '../middleware/AuthMiddleware.php';
AuthMiddleware::handle(); // Cegat request
echo json_encode([
"status" => "OK",
"message" => "Akses berhasil"
]);
5. Contoh Middleware Validasi API Key
class ApiKeyMiddleware {
public static function check() {
$key = $_GET['api_key'] ?? null;
if ($key !== "12345") {
http_response_code(403);
echo json_encode(['error' => 'API Key salah']);
exit;
}
}
}
6. Best Practice Middleware PHP
- Gunakan satu folder khusus untuk middleware.
- Setiap middleware harus punya fungsi handle().
- Jangan campur kode autentikasi dengan endpoint.
- Gunakan JSON response standar ketika request ditolak.
- Sediakan middleware per fitur: auth, api-key, csrf, rate limit.
Dengan pendekatan middleware, API menjadi lebih rapi, aman, dan mudah dikembangkan seperti framework besar namun tetap ringan karena menggunakan PHP Native.