Route Handlers și Proxy
API-uri cu route.ts, Request/Response standard și proxy.ts.
Actualizat
Ce este un Route Handler
Un Route Handler e un endpoint HTTP scris în app/: un fișier route.ts care exportă funcții cu numele metodelor HTTP. Primește un Request standard și returnează un Response standard — exact API-urile Web din lecția fetch.
// app/api/posts/route.ts → /api/posts
export async function GET(request: Request) {
const q = new URL(request.url).searchParams.get('q') ?? ''
return Response.json(await searchPosts(q))
}
export async function POST(request: Request) {
const body = await request.json()
return Response.json(await createPost(body), { status: 201 })
}- Metode suportate:
GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS. - Nu pot exista
route.tsșipage.tsxîn același folder. - Segmente dinamice merg la fel:
app/api/posts/[id]/route.ts.
Când folosești Route Handlers
| Situație | Route Handler? |
|---|---|
| webhook de la Stripe, un CMS, GitHub | da |
| API consumat de o aplicație mobilă / de parteneri | da |
| RSS, sitemap custom, fișiere generate, imagini | da |
| proxy spre un API extern (ascunzi cheia, eviți CORS) | da |
| formular din aplicația ta | nu → Server Action |
| datele unei pagini | nu → Server Component |
Ce este Proxy
Proxy (proxy.ts în rădăcina proiectului — fostul middleware) e cod care rulează înainte de fiecare request potrivit, înainte să ajungă la pagină. Poate redirecționa, rescrie URL-ul, modifica headere și cookie-uri, sau răspunde direct.
// proxy.ts
import { NextResponse, type NextRequest } from 'next/server'
export function proxy(request: NextRequest) {
if (!request.cookies.has('session') && request.nextUrl.pathname.startsWith('/dashboard')) {
return NextResponse.redirect(new URL(`/login?next=${request.nextUrl.pathname}`, request.url))
}
}
export const config = { matcher: ['/dashboard/:path*'] }Aplicația asta folosește proxy.ts ca să-ți dea cookie-ul anonim vid.
Ce pui în proxy — și ce nu
| Da | Nu |
|---|---|
| redirect-uri pe baza URL-ului / cookie-urilor | interogări lente în DB |
| verificări optimiste de auth („are cookie de sesiune?”) | autorizare completă — o refaci în pagină / acțiune |
| headere de securitate, A/B testing, i18n | logică de business |
| setarea cookie-urilor | fetch cu cache |
Pe scurt
- Route Handler =
route.tscu funcțiiGET/POST,Request→Response. - Pentru webhooks și API-uri externe; formularele tale merg prin Server Actions.
- Proxy rulează înaintea request-ului: redirect, headere, cookie-uri — rapid și simplu.