API route rate limit
Basit IP rate limit’li API route şablonu.

Prompt Metni
Next.js App Router için POST /api/generate Route Handler yaz. - IP başına saatte 10 istek kabul et. - Tek sunuculu demo için Map kullan. - Limit aşılırsa 429 JSON dön. - İstek gövdesindeki prompt boşsa 400 dön. - Üretimde neden paylaşımlı bir depolama gerektiğini iki cümleyle açıkla.
Prompt Sonucu
import type { NextRequest } from 'next/server'
type Bucket = { count: number; resetAt: number }
const buckets = new Map<string, Bucket>()
const WINDOW_MS = 60 * 60 * 1000
const LIMIT = 10
export async function POST(request: NextRequest) {
const ip = request.headers.get('x-forwarded-for')?.split(',')[0]?.trim()
?? 'unknown'
const now = Date.now()
const current = buckets.get(ip)
const bucket = !current || current.resetAt <= now
? { count: 0, resetAt: now + WINDOW_MS }
: current
if (bucket.count >= LIMIT) {
return Response.json(
{ error: 'İstek limiti aşıldı.', resetAt: bucket.resetAt },
{ status: 429 }
)
}
const body: unknown = await request.json()
const prompt = typeof body === 'object' && body !== null
&& 'prompt' in body && typeof body.prompt === 'string'
? body.prompt.trim()
: ''
if (!prompt) {
return Response.json({ error: 'Prompt zorunludur.' }, { status: 400 })
}
bucket.count += 1
buckets.set(ip, bucket)
return Response.json({ result: 'Demo çıktı', remaining: LIMIT - bucket.count })
}
Map yalnızca aynı process içindeki istekleri görür ve yeniden başlatmada sıfırlanır. Çoklu instance kullanılan üretim ortamında tüm instance'ların ortak sayacı görebilmesi için Redis veya benzeri paylaşımlı, atomik bir depo kullanılmalıdır.
Benzer Promptlar

Kod
Next.js server action form
Zod doğrulamalı Next.js server action form örneği ister.

Kod
Erişilebilir React accordion
WAI-ARIA uyumlu accordion bileşeni üretimi.

Kod
Sınıftan hook refaktörü
Class bileşenini hook’lara güvenli şekilde taşır.

Kod
Strict TypeScript tipleri
any temizliği ve ayrıştırılmış birlik tipleri.