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
Zod ile ortam değişkenleri
Eksik gizli anahtarı açılışta yakalayan Zod ortam şeması.

Kod
Next.js dinamik metadata
Promise params ile başlık, açıklama ve mutlak Open Graph adresi.

Kod
Webhook HMAC doğrulaması
timingSafeEqual kullanan webhook imza kontrolü.

Kod
React iyimser beğeni
Beğeni sayısını sunucu yanıtından önce güncelleyen useOptimistic örneği.