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 });
}