Middleware
Memahami konsep middleware dalam pemrosesan request API
Apa itu Middleware
- Fungsi yang berjalan di antara request masuk dan response keluar
- Memproses request sebelum sampai ke handler endpoint
- Bisa juga memodifikasi response sebelum dikirim ke client
Cara Kerja Middleware
- Request masuk dari client
- Middleware pertama diproses
- Middleware berikutnya diproses secara berurutan
- Handler endpoint diproses
- Response melewati middleware secara terbalik
- Response dikirim ke client
Jenis-Jenis Middleware
Authentication Middleware
- Memeriksa apakah request memiliki token atau session valid
- Menolak request dengan status 401 jika tidak terautentikasi
- Menyimpan data user ke request agar handler bisa mengaksesnya
Authorization Middleware
- Memeriksa apakah user punya izin untuk mengakses resource
- Menolak request dengan status 403 jika tidak punya izin
- Biasanya berjalan setelah authentication middleware
Logging Middleware
- Mencatat setiap request yang masuk ke API
- Mencatat method, URL, status code, dan waktu response
- Memudahkan debugging dan monitoring
Error Handling Middleware
- Menangkap error yang terjadi di handler atau middleware lain
- Mengubah error menjadi format response yang konsisten
- Mencegah error tidak tertangkap dan server crash
Validation Middleware
- Memeriksa format dan isi request body, query, atau parameter
- Menolak request dengan status 400 jika data tidak valid
- Memastikan handler hanya menerima data yang sudah bersih
Contoh Middleware Sederhana
function loggingMiddleware(request, response, next) {
const start = Date.now();
response.on('finish', () => {
const duration = Date.now() - start;
console.log(`${request.method} ${request.url} ${response.statusCode} ${duration}ms`);
});
next();
}Middleware Stack
- Middleware dijalankan dalam urutan pendaftaran
- Urutan penting, authentication harus sebelum authorization
- Middleware global berjalan untuk semua endpoint
- Middleware spesifik hanya berjalan untuk endpoint tertentu
Keuntungan Menggunakan Middleware
- Logic umum tidak perlu diulang di setiap handler
- Pemisahan concern yang jelas
- Mudah menambah atau menghapus fungsionalitas
- Testing handler lebih fokus karena logic umum dipisah
Praktik Terbaik
- Gunakan middleware untuk logic yang berulang di banyak endpoint
- Jangan letakkan logic bisnis di middleware
- Pastikan middleware selalu memanggil
next()agar request tidak terhenti - Middleware error handling harus berada di posisi terakhir