EXPRESS MİDDLEWARE KURGULAMAK VE GÜVENLİ API TASARLAMAK
API tarafında sorunlar genelde “iş çalışmıyor” diye başlamaz. Önce küçük bir yavaşlama, sonra anlamsız 500 hataları, ardından loglarda kaybolan izler… En sonunda da bir güvenlik açığı veya kontrolsüz trafik dalgası gelir. Çoğu ekip, bu problemleri tek tek yamayarak çözmeye çalışır ve sistem giderek karmaşıklaşır.
Express dünyasında bu karmaşayı düzenlemenin en etkili yolu, middleware mimarisini doğru kurgulamaktır. Middleware; doğrulama, yetkilendirme, rate limit, input validation, hata yönetimi ve gözlemlenebilirlik gibi kritik katmanları standartlaştırmayı sağlar.
Bu yazıda Express middleware tasarımını uçtan uca ele alacağız: doğru sıralama kurmak, güvenlik kontrollerini merkezileştirmek, hataları yakalamak ve sürdürülebilir bir API tasarımı oluşturmak. Daha sistematik pratik için nodejs eğitimi içeriğine de göz atabilirsiniz.

Express middleware mantığını netleştirmek ve akışı okumak
Express’te her istek, bir zincirden geçer. Bu zincirin her halkası bir middleware’dir. Middleware; request/response nesnelerini okuyabilir, değiştirebilir, isteği bir sonraki adıma aktarabilir veya akışı sonlandırabilir.
Request lifecycle akışını anlamak ve doğru sırayı kurmak
Middleware sırası rastgele değildir. Örneğin JSON body parse edilmeden validation yapmak mümkün değildir. Ya da auth kontrolü yapılmadan rate limit uygulamak, bazı senaryolarda yanlış maliyet yaratır. Burada amaç, akışı okunabilir ve tutarlı hale getirmektir.
Tek sorumluluk ilkesini uygulamak ve katmanı sade tutmak
Bir middleware’in tek işi olmalıdır: loglama, doğrulama, rol kontrolü, input temizleme gibi. “Her şeyi yapan” middleware zamanla büyür, test edilemez hale gelir ve hata ayıklamayı zorlaştırır. Bakımı kolaylaştırmak için parçalamak gerekir.
Güvenlik katmanını merkezileştirmek ve standartlaştırmak
Güvenli API tasarımında en büyük hata, kontrolleri route içine serpiştirmektir. Bu yaklaşım hem tekrar üretir hem de bazı endpoint’lerde kontrol unutulmasına yol açar. Middleware ile güvenlik katmanı “tek yerden” yönetilebilir.
Authentication kontrolünü eklemek ve erişimi sınırlamak
Token doğrulama veya session kontrolü genellikle ilk kritik adımdır. Ancak doğrulama yaparken, hatalı token’ı farklı mesajlarla ifşa etmek risklidir. Yanıt formatını standart tutmak daha güvenlidir.
Authorization kontrolünü kurmak ve rol bazlı yönetmek
Authentication “kimsin?” sorusunu yanıtlar. Authorization ise “ne yapabilirsin?” sorusunu. Role-based access control (RBAC) veya permission bazlı yapı, middleware ile temiz şekilde uygulanabilir.
Input validation yapmak ve saldırı yüzeyini küçültmek
Bir API’nin güvenli olması, yalnızca token doğrulamakla bitmez. Yanlış tipte veri, beklenmeyen alanlar veya çok büyük payload’lar, sistemin stabilitesini bozar. Bu yüzden validation ve sanitization, middleware seviyesinde ele alınmalıdır.
Schema doğrulama uygulamak ve hatayı anlaşılır döndürmek
Validation, “kullanıcı hatası” ile “sistem hatası” ayrımını netleştirir. Ayrıca saldırganların payload denemeleriyle sistemi zorlamasını da azaltır. Bu katmanda amaç; temiz veriyle route handler’a ulaşmaktır.
Payload limit belirlemek ve kaynak tüketimini kontrol etmek
JSON body parse edilirken boyut limiti koymak, basit ama etkili bir güvenlik önlemidir. Çok büyük request body’leri, servis belleğini ve CPU’yu gereksiz tüketebilir.
const express = require("express");
const app = express();
app.use(express.json({ limit: "200kb" }));
app.use(express.urlencoded({ extended: true, limit: "200kb" }));Bu yaklaşım, özellikle form post eden veya yoğun payload gönderen entegrasyonlarda kaynak tüketimini azaltmak için önemlidir.
Rate limit ve brute force koruması eklemek
API’ler sadece “hack” saldırısı almaz; bazen yanlış yapılandırılmış bir istemci, dakikada binlerce istek atarak sistemi çökertir. Rate limit middleware’i, bu riski ciddi ölçüde düşürür.
IP bazlı limit koymak ve kritik endpoint’leri korumak
Özellikle login, OTP, şifre sıfırlama ve search endpoint’leri saldırıya açıktır. Bu endpoint’lere özel limit uygulamak, brute force riskini azaltır.
Limit stratejisini seçmek ve dağıtık sistemde düşünmek
Tek sunucuda memory store yeterli olabilir. Ancak birden fazla instance varsa, Redis gibi merkezi bir store kullanmak gerekir. Burada hedef, limitin “tutarlı” çalışmasıdır.
const rateLimit = require("express-rate-limit");
const loginLimiter = rateLimit({
windowMs: 10 * 60 * 1000,
max: 20,
standardHeaders: true,
legacyHeaders: false,
message: { error: "Too many requests" }
});
app.use("/api/auth/login", loginLimiter);Hata yönetimini standardize etmek ve sızıntıyı önlemek
Express’te güvenli API tasarımının en kritik noktalarından biri, hata mesajlarını kontrol etmektir. Stack trace veya DB hata mesajı gibi detaylar, saldırgan için altın değerindedir. Ayrıca kullanıcı tarafında da tutarlı bir format gerekir.
Error handler middleware yazmak ve tek format döndürmek
Error handler, Express’te 4 parametreli özel bir middleware’dir. Burada amaç; hatayı loglamak, kullanıcıya güvenli mesaj döndürmek ve HTTP status kodlarını doğru seçmektir.
Operational error ile bug ayrımı yapmak ve izlenebilirlik kurmak
Validation hatası veya auth hatası gibi durumlar operational error’dur. Uygulama bug’ları ise ayrı ele alınmalıdır. Bu ayrımı yapmak, hem alarm sistemini iyileştirir hem de ekip içi iletişimi güçlendirir.
Gözlemlenebilirlik eklemek ve log kalitesini artırmak
Güvenli bir API tasarımında yalnızca saldırıyı engellemek değil, olup biteni anlamak da önemlidir. Middleware katmanında request id, latency ölçümü ve audit log gibi standartlar kurulabilir.
Request id üretmek ve logları ilişkilendirmek
Bir isteğin sistem içinde hangi adımlardan geçtiğini izlemek için request id çok etkilidir. Bu sayede bir hata raporu geldiğinde, loglarda hızlıca iz sürmek mümkün olur.
Latency ölçmek ve yavaş endpoint’leri tespit etmek
Performans problemi güvenlik kadar kritiktir. Yavaş endpoint’ler zamanla timeout’a, ardından retry fırtınasına dönüşebilir. Middleware ile ölçüm yaparak darboğazları erken görmek mümkündür.

Middleware sıralamasını planlamak ve sürdürülebilir yapı kurmak
İyi bir middleware mimarisi, sadece bug’ları azaltmaz; ekip büyüdükçe geliştirme hızını da korur. Çünkü herkes aynı standart üzerinden ilerler. Burada hedef, “bu endpoint neden farklı davranıyor?” sorusunu ortadan kaldırmaktır.
- Body parser’ı en başta çalıştırmak
- Request id ve loglama eklemek
- Rate limit ve brute force koruması koymak
- Authentication ve authorization zincirini kurmak
- Input validation ve sanitization uygulamak
- Route handler’ları sade tutmak
- Error handler ile çıktıyı standartlaştırmak
Özetle, Express middleware kurgulamak güvenli API tasarımının temelidir. Sıralamayı doğru planlamak, kontrolleri merkezi hale getirmek, hataları güvenli biçimde yönetmek ve gözlemlenebilirliği güçlendirmek; hem güvenlik risklerini azaltır hem de bakım maliyetini düşürür.


