Yönetilen API geçitlerine (API gateways) veri akışını inceleme imkânı vermeyen uygulamalara para ödemekten sıkıldım. Bu yüzden API Middleware‘ı geliştirdim — açık kaynak, kendi üzerinde barındırılabilen, tek komutla çalıştırabileceğiniz bir çözüm.
GitHub: https://github.com/joshiabir/theapimiddleware
Ne Yapar?
Ne Yapar?
API Middleware, istemciler ile arka uç hizmetleriniz arasında yer alır. İstemciler direkt olarak arka uca erişmek yerine, geçidi (gateway) kullanarak:
- Gelen alan adına (domain) göre trafiği yönlendirir.
- Gizli veriler için istek ve yanıt kısımlarını tarar (DLP).
- Küresel ve kullanıcı bazında hız sınırlamaları koyar.
- İstekleri iletmeden önce kimlik doğrulaması kontrolü yapar.
- Her isteği zaman kaybı olmadan günlüğe kaydeder — asenkron olarak, bu nedenle istemcinin yavaşlamasına neden olmaz.
Tüm ayarlar, bir web yönetim paneli üzerinden yapılandırılır. Yapılandırma dosyaları yok, yeniden dağıtım (redeployment) yok — bir DLP kuralını değiştirirseniz, bu anında geçerli olur.
Mimari
Mimari
Bir MySQL veritabanı paylaşan iki Laravel 11 uygulaması:
fiona — geçit
fiona — geçit
Request → policyControl middleware → DLP scan → HTTP proxy → DLP scan → Response
↓
Queue job (logging)
policyControl içindeki middleware zinciri:
- Alan adını
domain_routingsiçinde arar. - URL için kümeleri (clusters) ve API yapılandırmasını bulur.
- Politikaları uygular: hız sınırlamaları, kimlik doğrulama, IP filtreleme, honeypot tespiti.
- Tüm kontroller geçerse isteği iletir.
Proxy, Laravel’in Http::send() fonksiyonunu kullanarak orijinal başlıklar ve yöntem korunarak yanıtı alır. Yanıt geldikten sonra, DLP yanıt gövdesinde tekrar çalışır. Günlük yazımları bir kuyruk işine yönlendirilir, böylece gecikme eklemez.
plucker-app — yönetim paneli
plucker-app — yönetim paneli
Livewire v3 ve Jetstream ile inşa edilmiştir. 54 Livewire bileşeni şunları kapsar:
- Alan yönlendirme yönetimi
- Küme ve API yapılandırması
- DLP kural editörü (anahtar kelimeler, regex desenleri, atlama URL’leri)
- İstek günlüğü görüntüleyici (filtreleme ve CSV dışa aktarma)
- Güvenlik olayları akışı
- OAuth girişi (Google, GitHub, Microsoft)
Veritabanına dayalı yapılandırma, ana tasarım kararıdır: fiona, her istekte politika durumunu veritabanından okur, plucker ise buna yazar. İki uygulama arasında sinyal gerekmez — politika değişiklikleri anında geçerlidir.
DLP Motoru
DLP Motoru
Her alan birçok DLP politikasına sahip olabilir. Tarayıcı, bunları istek veya yanıt gövdesi üzerinde zincirleme yapar:
// Anahtar kelime eşleşmesi
$redacted_body = preg_replace("https://dev.to/" . preg_quote($policy->value, "https://dev.to/") . "https://dev.to/", '[redacted]', $body);
// Regex desen eşleşmesi
$pattern = '~' . $policy->value . '~';
$redacted_body = preg_replace($pattern, '[redacted]', $body);
Politikaya göre eylemler:
-
alert— eşleşmeyi kaydet, orijinal gövdeyi geçir. -
redact— eşleşmeleri[redacted]ile değiştir. -
block— herhangi bir eşleşme bulunursa 403 döndür.
Geçersiz regex desenleri yakalanır ve zarif bir şekilde atlanır, böylece kötü bir kural her şeyi kırmaz.
Kurulum
Kurulum
git clone https://github.com/joshiabir/theapimiddleware.git
cd theapimiddleware
./setup.sh
Kurulum betiği, yoksa Docker’ı yükler (macOS için Homebrew, Ubuntu/Debian/Fedora için paket yöneticisi aracılığıyla), uygulama anahtarlarını ve veritabanı şifrelerini oluşturur, .env dosyasını yazar ve tüm konteynerleri başlatır.
İki hizmet başlatılır:
- Geçit (fiona):
http://localhost:8000 - Yönetim paneli (plucker-app):
http://localhost:8001
Test
Test
Tam bir PestPHP test takımı, SQLite bellek içi kullanarak — veri tabanı olmadan test çalıştırma imkânı sunar.
cd fiona && ./vendor/bin/pest
cd plucker-app && ./vendor/bin/pest
Şunları kapsar: DLP hizmet mantığı, politika middleware uygulaması, proxy akışı, Livewire panelleri bileşenleri.
Mimari hakkında geribildirime açığım, özellikle paylaşımlı veritabanı modeli ve DLP zincirleme yaklaşımı hakkında. Siz olsanız neyi farklı yapardınız?
Kaynak: Orijinal Makale


