Route Handlers и Proxy
API через route.ts, стандартные Request/Response и proxy.ts.
Обновлено
Что такое Route Handler
Route Handler — HTTP-эндпоинт, написанный в app/: файл route.ts, который экспортирует функции с именами HTTP-методов. Он получает стандартный Request и возвращает стандартный Response — ровно те Web API, что в уроке 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 })
}- Поддерживаемые методы:
GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS. route.tsиpage.tsxне могут лежать в одной папке.- Динамические сегменты работают так же:
app/api/posts/[id]/route.ts.
Когда использовать Route Handlers
| Ситуация | Route Handler? |
|---|---|
| вебхук от Stripe, CMS, GitHub | да |
| API для мобильного приложения / партнёров | да |
| RSS, свой sitemap, генерируемые файлы, изображения | да |
| прокси к внешнему API (скрыть ключ, обойти CORS) | да |
| форма вашего приложения | нет → Server Action |
| данные страницы | нет → Server Component |
Что такое Proxy
Proxy (proxy.ts в корне проекта — бывший middleware) — код, который выполняется до каждого подходящего запроса, до того как он дойдёт до страницы. Может перенаправить, переписать URL, изменить заголовки и cookie или ответить сам.
// 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*'] }Это приложение использует proxy.ts, чтобы выдать вам анонимный cookie vid и направить на нужный язык.
Что класть в proxy — а что нет
| Да | Нет |
|---|---|
| редиректы по URL / cookie | медленные запросы к БД |
| оптимистичные проверки авторизации («есть cookie сессии?») | полную авторизацию — повторите её в странице / действии |
| заголовки безопасности, A/B-тесты, i18n | бизнес-логику |
| установку cookie | кэшированные запросы |
Коротко
- Route Handler =
route.tsс функциямиGET/POST,Request→Response. - Для вебхуков и внешних API; ваши формы идут через Server Actions.
- Proxy выполняется до запроса: редиректы, заголовки, cookie — быстро и просто.