B2B SaaS’ınız için Gizli Tehdit
Başarılı bir B2B SaaS platformu inşa ettiğinizde, genellikle bir sonraki mantıklı adım, kurumsal entegrasyon için kamuya açık bir API sunmaktır. Ancak API’niz canlı hale geldiği anda, hedef haline gelir. Kötü niyetli aktörler, hatalı yazılmış istemci scriptleri veya kazara oluşan sonsuz döngüler, uç noktalarınıza saniyede binlerce istek gönderebilir. Eğer arka uç sisteminiz bu trafiği dengelemeye hazır değilse, veritabanı bağlantılarınızı tüketir, sunucularınızı çökertebilir ve gerçek, ödeme yapan müşterileriniz için kesintilere neden olabilir.
Varsayılan hız sınırlaması (örneğin, dakikada 60 istek) sağlam bir B2B uygulaması için genellikle yeterli değildir. Dinamik, kiracıdan haberdar bir hız sınırlaması gereklidir; bu da bir müşterinin abonelik seviyesine göre ölçeklenmelidir.
<h2>Temellerin Ötesinde: Laravel'de Dinamik Hız Sınırlama</h2>
<p>Laravel, yüksek performanslı trafik kontrolü için Redis veya Memcached ile sorunsuz bir şekilde entegre olan son derece zarif bir <code>RateLimiter</code> facade'ı sunar. Tüm rota üzerinde genel bir limit uygulamak yerine, gelen isteği inceleyebilir, kiracıyı (veya belirli API anahtarını) tanımlayabilir ve özelleştirilmiş throttle mantığını uygulayabiliriz.</p>
<h3>Adım 1: Özel Hız Sınırlayıcıyı Tanımlama</h3>
<p>Hız sınırlama mantığımızı <code>App\Providers\RouteServiceProvider</code> sınıfının <code>boot</code> metodunda tanımlarız. Burada kimlik doğrulaması yapılmış kullanıcıyı veya kiracıyı sorgulayabilir ve limitleri abonelik planlarına göre dinamik olarak ayarlayabiliriz.</p>
<pre><code>namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
class RouteServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->configureRateLimiting();
// … diğer rota tanımları
}
/
* Uygulama için hız sınırlayıcılarını yapılandır.
*/
protected function configureRateLimiting(): void
{
RateLimiter::for('b2b-api', function (Request $request) {
// Kullanıcı kimliği doğrulanmadıysa, sıkı bir genel limit uygula
if (! $request->user()) {
return Limit::perMinute(30)->by($request->ip());
}
// Kiracının abonelik seviyesini al
$plan = $request->user()->tenant->subscription_plan;
// B2B SaaS katmanına göre dinamik limitler uygula
$limit = match($plan) {
'enterprise' => 1000,
'pro' => 300,
default => 60,
};
// Belirli API Token veya Kullanıcı ID'sine göre limit uygula
return Limit::perMinute($limit)->by($request->user()->id);
});
}}
<h3>Adım 2: Middleware Uygulama</h3>
<p>Tanımlandıktan sonra, bu özel limitörü API rotalarınıza uygulamak son derece basittir. Sadece <code>throttle:b2b-api</code> middleware'ini rota grubunuza eklemeniz yeterlidir.</p>
<pre><code>// routes/api.php
use Illuminate\Support\Facades\Route;
Route::middleware([‘auth:sanctum’, ‘throttle:b2b-api’])->group(function () {
Route::get(‘/invoices’, [InvoiceController::class, ‘index’]);
Route::post(‘/webhooks/sync’, [WebhookController::class, ‘store’]);
// Bu gruptaki tüm rotalar artık dinamik olarak korunuyor
});
<h2>Trafik Şekillendirmenin İş Değeri</h2>
<p>Kiracıdan haberdar hız sınırlamanın uygulanması yalnızca güvenlik ile ilgili değildir; B2B SaaS platformları için çekirdek bir iş stratejisidir. İletimi sıkı bir şekilde kontrol ederek, şunları başarırsınız:</p>
<ul>
<li>
<strong>Öngörülebilir Altyapı Maliyetleri:</strong> Tek bir asi müşterinin AWS veya DigitalOcean bant genişliği faturalarınızı sıraya almasını engellersiniz.</li>
<li>
<strong>Katmanlı Monetizasyon:</strong> API iletim hızı özel bir özellik haline gelir. Limitlerine ulaştığında müşterileri daha yüksek katmanlı Enterprise planlara yükseltme fırsatına sahip olursunuz.</li>
<li>
<strong>Platform Stabilitesi:</strong> "Gürültücü komşu" problemini ortadan kaldırarak, bir müşterinin yoğun veri alma işleminin diğerlerinin panosunu yavaşlatmasını garantilemiş olursunuz.</li>
</ul>
<h2>Sonuç</h2>
<p>Bir API, kullanıcılarınızla yaptığınız bir sözleşmedir. Bu sözleşmeye saygı göstermek için, sistemin baskı altında kalmasını sağlamalısınız. Varsayılan sınırlamaların ötesine geçmek ve Laravel'de dinamik, Redis destekli hız sınırlamaları tasarlamak, kurumsal düzeyde yazılım geliştiren her ciddi full-stack geliştiricinin zorunlu bir adımıdır.</p>Kaynak: Orijinal Makale


