раздел 04

Serverless-функции

Что это

Фронтенд - это то, что видит пользователь в браузере. Но часто нужен и бэкенд: код, который выполняется на сервере, прячет секретные ключи, ходит в базу или вызывает API нейросети. Раньше под это поднимали и обслуживали отдельный сервер. Serverless-функция - это кусочек бэкенд-кода, который вы просто кладёте в проект, а Vercel сам запускает его на запрос и сам гасит, когда не нужен. Своего сервера у вас нет - отсюда «serverless».

Зачем это вам

  • Прячете секреты. Ключ к API нейросети нельзя держать в браузере. Запрос идёт в вашу функцию на сервере, она с ключом обращается к API - ключ остаётся скрытым.
  • Никакого администрирования. Не настраиваете и не обслуживаете сервер. Функция живёт рядом с фронтендом в том же проекте.
  • Платите за вызовы, а не за простой. Нет запросов - функция не работает и не тратит ресурсы.

Как это сделать

В большинстве фреймворков на Vercel это «положить файл в нужную папку»:

  1. В проекте есть папка для API-маршрутов (в Next.js - роуты внутри app/api/...).
  2. Кладёте туда файл-обработчик: он принимает запрос и возвращает ответ.
  3. На фронтенде делаете запрос на этот адрес (например, /api/chat).
  4. При деплое Vercel сам превращает файл в serverless-функцию - отдельно настраивать ничего не надо.

Когда это нужно

  • Спрятать секретный ключ (вызов API нейросети, платёжки).
  • Сходить в базу данных и не отдавать доступ к ней в браузер.
  • Сделать любую логику, которая не должна выполняться на стороне клиента.

Пример

Чат с AI на вашем сайте. Если дёргать API нейросети прямо из браузера - ключ будет виден всем. Вместо этого делаете serverless-функцию /api/chat: браузер шлёт ей сообщение, функция на сервере с секретным ключом обращается к нейросети и возвращает ответ. Ключ не покидает сервер, отдельный бэкенд поднимать не пришлось.

Антипаттерны

  • Звать платный API напрямую из браузера. Ключ утечёт. Прячьте за serverless-функцией.
  • Пытаться держать в функции долгое тяжёлое вычисление. У serverless есть лимит времени выполнения; для долгих задач нужен другой подход.
  • Полагаться на «память» между вызовами. Функция поднимается и гасится; постоянное состояние держите в базе, а не в самой функции.

Подразделы