Next.js App Router: Архитектура чистого серверного API
Как структурировать Zod-валидацию, обработку ошибок и типизацию ответов в роутах
Обновлено: Октябрь 2026•Время чтения: 4 мин•
#Next.js#TypeScript#Zod#API Design#Architecture
Краткая суть (TL;DR)
Практика построения строгих API-хэндлеров на Route Handlers в Next.js: отсечение плохих payload до выполнения бизнес-логики и защита от инъекций.
1. Шаблон безопасного API Route Handler
typescript
import { NextResponse } from "next/server";
import { z } from "zod";
const requestSchema = z.object({
email: z.string().email("Неверный email"),
name: z.string().min(2, "Имя слишком короткое").max(100),
payload: z.record(z.string(), z.unknown()).optional(),
});
export async function POST(req: Request) {
let body: unknown;
try {
body = await req.json();
} catch {
return NextResponse.json({ error: "Malformed JSON" }, { status: 400 });
}
const result = requestSchema.safeParse(body);
if (!result.success) {
return NextResponse.json(
{ error: "Validation failed", details: result.error.flatten().fieldErrors },
{ status: 422 },
);
}
// Бизнес-логика строго с типизированным result.data
return NextResponse.json({ ok: true, data: result.data });
}