Как делать11 октября 2026 г.9 мин чтения
Backend на Node.jsШаг 1 из 8

Что такое backend: сервер, API, база и всё между ними

Коротко

Backend — серверная часть приложения: код, который принимает HTTP-запросы, проверяет данные и права, выполняет правила бизнеса, работает с базой данных и внешними сервисами и возвращает ответ. Пользователь его не видит и не может изменить, поэтому всё, от чего зависят деньги, доступы и сохранность данных, решается именно здесь. Минимальный backend — это процесс с API, база данных, конфигурация в переменных окружения и логи; по мере роста к нему добавляются кэш, очереди и фоновые обработчики.

ОсновыУровень: НачальныйОсновы backend

После материала вы сможете

  • перечислить обязанности backend — валидация, бизнес-логика, хранение, права, интеграции — и шаги обработки одного запроса
  • решить, какую работу выполнять внутри запроса, а какую выносить в очередь и worker
  • объяснить, почему HTTP не хранит состояние, где хранить сессии и почему не в памяти процесса
  • выбрать стек для учебного проекта — Node.js, Java/Spring или Python — и обосновать выбор
Содержание
  1. 01Что делает сервер за один запрос
  2. 02Обязанности backend: валидация, логика, хранение, права, интеграции
  3. 03Синхронные запросы и фоновая работа
  4. 04Состояние: где его хранить и почему сервер «забывает»
  5. 05Логи, конфигурация и внешние сервисы
  6. 06Стеки: Node.js, Java/Spring, Python — чем отличаются
  7. 07Практика: схема backend для онлайн-записи и что дальше

Что делает сервер за один запрос

В уроке о том, как устроен сайт, backend был «кухней ресторана», а в уроке про HTTP и JSON мы разобрали, из чего состоят запрос и ответ. Здесь посмотрим, что происходит внутри сервера между ними. MDN описывает задачу серверного кода так: проверить присланные данные и сам запрос, сохранить или получить данные из базы и отправить клиенту нужный ответ. На практике один запрос «записаться на стрижку в пятницу в 15:00» проходит примерно такой путь:

  1. Маршрутизация

    Сервер смотрит на метод и путь — например, POST /api/bookings — и выбирает функцию-обработчик. Обработчик (handler) — функция, которая отвечает за один тип запроса.

  2. Аутентификация

    Кто прислал запрос? Сервер проверяет cookie сессии или токен и находит пользователя. Нет подтверждения — ответ 401.

  3. Валидация

    Пришли ли все поля, правильного ли они типа, не в прошлом ли дата. Ошибка во входных данных — ответ 400 с понятным описанием, а не падение сервера.

  4. Бизнес-логика и права

    Работает ли салон в это время, свободен ли мастер, может ли этот клиент записываться. Нарушено правило — 409 или 403.

  5. Хранение

    Запись сохраняется в базе данных — так, чтобы два одновременных запроса не заняли одно окно.

  6. Ответ и след в логах

    Клиент получает 201 и созданную запись, а в лог уходит строка о том, что произошло и сколько это заняло.

ЗапросМаршрут и входВалидацияЛогика и базаОтвет и лог
Каждый шаг может закончить запрос раньше: 401, 400, 409 — ответ без записи в базу.

Обязанности backend: валидация, логика, хранение, права, интеграции

Серверный код, в отличие от кода в браузере, имеет полный доступ к операционной системе и может быть написан на любом языке — это MDN отмечает как главное различие клиентской и серверной разработки. Вместе с доступом сервер получает ответственность. Удобно разложить её на пять обязанностей — на примере сервиса онлайн-записи в салон.

Валидация

Что это значит
Не пускать дальше данные неверной формы и типа
Пример: онлайн-запись
Телефон в правильном формате, дата не в прошлом, услуга существует

Бизнес-логика

Что это значит
Правила предметной области, которые нельзя доверить клиенту
Пример: онлайн-запись
Длительность услуги, рабочие часы мастера, запрет двойной записи

Хранение

Что это значит
Надёжно записать и быстро найти данные
Пример: онлайн-запись
Клиенты, мастера, услуги и записи в базе данных

Права

Что это значит
Кто и что может видеть и менять
Пример: онлайн-запись
Клиент видит свои записи, мастер — своё расписание, администратор — всё

Интеграции

Что это значит
Обмен с внешними системами через их API
Пример: онлайн-запись
SMS или сообщение в мессенджер, онлайн-оплата предоплаты, календарь

Аутентификация и авторизация звучат похоже, но это разные шаги. Аутентификация отвечает на вопрос «кто это?», авторизация — «что ему можно?». Пользователь может быть успешно аутентифицирован и всё равно не иметь права отменить чужую запись. Обоим шагам в направлении посвящены отдельные уроки.

Синхронные запросы и фоновая работа

Не всё нужно делать, пока пользователь ждёт ответа. Сохранить запись — нужно: без этого нельзя сказать «вы записаны». А отправить SMS-напоминание, пересчитать отчёт или сжать загруженное фото можно чуть позже. Такую работу выносят в фоновые задачи (background jobs): обработчик запроса кладёт задание в очередь и сразу отвечает, а отдельный процесс-обработчик (worker) забирает задания из очереди и выполняет их.

Синхронно, внутри запроса

  • Пользователь ждёт, пока всё закончится
  • Результат нужен для ответа: создана ли запись, сколько стоит заказ
  • Медленный внешний сервис замедляет и ваш ответ
  • Сбой внешнего сервиса превращается в ошибку для пользователя

В фоне, через очередь

  • Ответ уходит сразу, работа выполняется отдельным процессом
  • Подходит для писем, SMS, отчётов, обработки файлов, вебхуков
  • Задание можно повторить при сбое
  • Нужно хранить статус задания и следить за очередью

Методология The Twelve-Factor App описывает это как разные типы процессов: HTTP-запросы обслуживает web-процесс, а долгие фоновые задачи — worker-процесс. Сама очередь — ещё один внешний сервис наравне с базой данных: брокер сообщений вроде RabbitMQ, хранилище Redis или таблица заданий в той же PostgreSQL. Что выбрать, зависит от объёма и требований к надёжности; подробно — в уроке о фоновых задачах.

Состояние: где его хранить и почему сервер «забывает»

HTTP по умолчанию не хранит состояние (stateless): каждый запрос для сервера — новый, он не помнит, что этот же браузер секунду назад вошёл в аккаунт. Чтобы «помнить» пользователя, сервер после входа выдаёт cookie с идентификатором сессии, браузер прикладывает его к каждому следующему запросу, а сервер по идентификатору находит данные сессии. Так этот механизм описывает MDN.

Ключевой вопрос — где лежат данные сессии и всё остальное, что нужно помнить между запросами. Соблазнительно положить их в переменную в памяти процесса: это работает на ноутбуке и ломается в продакшене. Twelve-Factor App требует, чтобы процессы приложения были stateless и ничего не делили между собой, а всё, что должно сохраниться, лежало во внешнем хранилище. Причина простая: перезапуск при деплое стирает память процесса, а при нескольких копиях сервера следующий запрос может попасть в другую копию.

Память процесса

Что там уместно
Кэш на время одного запроса, справочник, который можно пересобрать
Чего ждать
Пропадёт при перезапуске; у каждой копии сервера своя

База данных

Что там уместно
Пользователи, записи, заказы — всё, что нельзя потерять
Чего ждать
Надёжно, с транзакциями и резервными копиями

Хранилище с истечением срока (Redis, Memcached)

Что там уместно
Сессии, кэш, счётчики лимитов
Чего ждать
Быстро, данные живут заданное время; Twelve-Factor App прямо советует его для сессий

Cookie в браузере

Что там уместно
Идентификатор сессии, настройки интерфейса
Чего ждать
Пользователь может прочитать и изменить значение — не храните там права и цены

Логи, конфигурация и внешние сервисы

Пользователь не видит backend, но и разработчик видит его только через логи. Лог — поток событий: «запрос пришёл», «запись создана», «SMS-сервис ответил ошибкой». Twelve-Factor App советует приложению не управлять файлами логов, а писать события в стандартный вывод (stdout) по одному на строку; собирать, хранить и искать их — задача окружения: хостинга, контейнерной платформы, системы сбора логов.

  • Пишите в лог метод, путь, код ответа, длительность и идентификатор запроса — по ним ищут проблему
  • Ошибки логируйте со стеком вызовов на сервере, а клиенту отдавайте короткое сообщение без внутренних деталей
  • Никогда не пишите в лог пароли, токены, номера карт и полные персональные данные
  • Настройки, которые меняются между окружениями — адрес базы, ключи сервисов, — храните в переменных окружения, а не в коде

Последний пункт — тоже из Twelve-Factor App: конфигурация отделена от кода, и проверка простая — код можно было бы в любой момент открыть публично, не раскрыв ни одного ключа. Там же база данных, очередь, почтовый сервис и кэш названы подключаемыми ресурсами (backing services): приложение обращается к ним по адресу из конфигурации и не знает, локальные они или облачные. Заменить одну базу на другую — значит поменять переменную, а не код.

  1. 01КлиентыСайт, мобильное приложение, админка, внешние системы с вебхуками
  2. 02API-процессМаршруты, аутентификация, валидация, бизнес-логика, ответы и логи
  3. 03WorkerФоновые задания из очереди: напоминания, отчёты, обработка файлов
  4. 04Подключаемые ресурсыБаза данных, хранилище сессий и очереди, почта и SMS, файловое хранилище
Минимальный backend, который можно масштабировать: процессы без состояния, данные — во внешних сервисах.

Стеки: Node.js, Java/Spring, Python — чем отличаются

Все обязанности из этого урока одинаковы в любом стеке — меняются язык, инструменты и то, сколько фреймворк делает за вас. MDN замечает, что серверную часть почти никогда не пишут без фреймворка: он берёт на себя маршрутизацию, разбор запросов, сессии, доступ к базе. Фреймворки бывают «всё включено», как Django, и минималистичные, как Express или Flask, где недостающее подключается отдельными библиотеками.

JavaScript / TypeScript на Node.js

Фреймворки
Express — минимальный; NestJS — со структурой модулей
Сильные стороны
Один язык с фронтендом, асинхронная модель для большого числа одновременных запросов
Что учесть
Express почти ничего не диктует: структуру, валидацию и работу с базой выбираете сами

Java / Kotlin

Фреймворки
Spring Boot
Сильные стороны
Строгая типизация, зрелая экосистема, встроенные сервер, безопасность, метрики и health checks
Что учесть
Больше понятий и конфигурации на старте, нужен JDK

Python

Фреймворки
FastAPI — для API; Django — «всё включено» с ORM и админкой
Сильные стороны
Быстрый старт; FastAPI строит валидацию и документацию OpenAPI на подсказках типов
Что учесть
Для тяжёлых вычислений и большого числа запросов важно правильно выбрать модель выполнения

Для учебного проекта выбирайте стек по тому, что вы уже знаете. Пишете фронтенд на JavaScript — начните с Node.js: не нужно учить второй язык одновременно с серверными понятиями. Учите Python — FastAPI даст рабочий API с документацией в несколько десятков строк. Целитесь в крупные компании и банковскую разработку — смотрите на Java и Spring Boot. По нашему опыту, переход между стеками даётся легко, если понятны сами обязанности backend: маршрут, валидация, логика, хранение, права.

Практика: схема backend для онлайн-записи и что дальше

Соберите всё вместе на одном сервисе. Салону нужен сайт, где клиент выбирает услугу, мастера и время; администратор видит расписание; клиенту за день до визита приходит напоминание. Прежде чем писать код, нарисуйте backend на бумаге — так вы увидите, какие части нужны и где хранится каждое состояние.

Дальше направление идёт от инструментов к архитектуре. Сначала — Node.js: модули, npm и первый HTTP-сервер без фреймворка. Затем Express: CRUD-API с валидацией и единым форматом ошибок. Параллельные ветки — Java со Spring Boot и Python с FastAPI или Django. После них — аутентификация, авторизация, фоновые задачи, тестирование backend и слои backend-приложения. Для работы с хранением понадобится направление «Базы данных».

  • Могу перечислить шаги обработки одного запроса: маршрут, вход, валидация, логика, хранение, ответ, лог
  • Понимаю, почему проверки на клиенте не заменяют проверки на сервере
  • Знаю, какую работу выносить в очередь и почему задание должно переживать повтор
  • Объясню, почему сессии не хранят в памяти процесса
  • Знаю, что пишут в лог и чего туда писать нельзя
  • Выбрал стек для учебного проекта и могу объяснить почему
Расскажите о задаче — мы изучим запрос и свяжемся с вами

Есть задача?
Обсудим и оценим — бесплатно.

Расскажите о продукте или проблеме. Предложим архитектуру, срок и стоимость первой версии после изучения задачи.

  • Оценка объёма и рисков до старта
  • NDA — по вашему или нашему шаблону
  • Старт работ в течение недели

Не присылайте через форму пароли, ключи доступа и исходный код — безопасную передачу доступа обсудим отдельно.

Нажимая кнопку, вы соглашаетесь с обработкой персональных данных.