Server Actions: формы без собственного API (Next.js)
Коротко: Server Actions — функции, которые выполняются на сервере и вызываются прямо из форм или компонентов; они заменяют многие написанные вручную маршруты API.
Подробнее: Вместо создания маршрута API для каждой формы вы помечаете функцию "use server" и передаёте её как action в <form>. При отправке браузер вызывает функцию на сервере; сетевой вызов берёт на себя Next.js.
Подробности
Пример
// actions.ts
"use server";
export async function save(formData: FormData) {
const title = String(formData.get("title") ?? "");
// проверить, сохранить, затем обновить страницу
}Достаточно <form action={save}>. Благодаря прогрессивному улучшению форма работает даже без JavaScript. После сохранения вы обновляете данные через revalidatePath/revalidateTag или перенаправляете через redirect.
Безопасность: относитесь как к общедоступному API
Каждое Server Action — конечная точка, доступная по HTTP, даже если выглядит как обычный вызов функции. Поэтому всегда:
- Проверяйте ввод (например, через Zod); типов TypeScript во время выполнения нет.
- Проверяйте вход и разрешение внутри самой функции, а не только в интерфейсе.
- Ограничение частоты запросов для действий, открытых для злоупотреблений.
- Не возвращайте секреты; сообщения об ошибках держите общими.
Состояние и обратная связь
useActionStateпредоставляет возвращаемое значение (например, тексты ошибок) и состояние ожидания.useFormStatusпоказывает «Сохранение…» в кнопках.useOptimisticпоказывает изменения сразу, до ответа сервера.- Для загрузки файлов и потоковой передачи иногда лучше подходят обработчики маршрутов.
Когда лучше маршрут API
Если интерфейсом должны пользоваться внешние клиенты (мобильное приложение, третьи стороны, вебхуки), имеет смысл документированный API с версиями. Server Actions предназначены для вашего собственного интерфейса, а их адреса меняются при сборке.
См. также: Next.js App Router, Валидация форм с Zod, CSRF