Express.js: создание REST API
2025-07-23

Express.js: создание REST API

Express.js — это минималистичный и гибкий фреймворк для Node.js, который позволяет быстро создавать REST API и веб-приложения. Благодаря простому синтаксису и большому количеству расширений Express.js стал стандартом де-факто для разработки серверных приложений на JavaScript. В этой статье рассмотрим основные этапы создания REST API на Express.js, разберём примеры кода и дадим пояснения к каждому шагу.

Установка Express.js

Перед началом работы убедитесь, что у вас установлен Node.js — это среда выполнения JavaScript вне браузера. Express.js работает поверх Node.js и использует его возможности для обработки HTTP-запросов.

Создайте новую папку для проекта и выполните инициализацию npm — это создаст файл package.json, в котором будут храниться зависимости и настройки проекта. Затем установите сам Express:

mkdir express-rest-api
cd express-rest-api
npm init -y
npm install express
  • npm init -y — быстро создаёт файл package.json с настройками по умолчанию.
  • npm install express — устанавливает Express.js как зависимость проекта.

Базовый пример API

Теперь создадим минимальный сервер. Для этого создайте файл index.js и добавьте следующий код:

const express = require('express');
const app = express();
const PORT = 3000;

app.use(express.json()); // Для парсинга JSON в теле запроса

app.get('/', (req, res) => {
  res.json({ message: 'Добро пожаловать в Express API!' });
});

app.listen(PORT, () => {
  console.log(`Сервер запущен на http://localhost:${PORT}`);
});

Пояснения:

  • const express = require('express'); — импортируем библиотеку Express.
  • const app = express(); — создаём экземпляр приложения Express.
  • app.use(express.json()); — добавляем middleware для автоматического парсинга JSON в теле входящих запросов (это важно для работы с API).
  • app.get('/', ...) — определяем маршрут для главной страницы (/), который возвращает JSON-ответ с приветствием.
  • app.listen(PORT, ...) — запускаем сервер на порту 3000 и выводим сообщение в консоль.

Теперь запустите сервер командой:

node index.js

Если вы перейдёте по адресу http://localhost:3000, то увидите JSON-ответ: { "message": "Добро пожаловать в Express API!" }. Это значит, что сервер работает корректно.

Роутинг и обработка запросов

REST API обычно работает с коллекциями данных. Для примера реализуем простейшее хранилище статей в памяти (массив объектов) и добавим маршруты для CRUD-операций (создание, чтение, удаление).

let articles = [
  { id: 1, title: 'Первая статья', content: 'Текст первой статьи' },
  { id: 2, title: 'Вторая статья', content: 'Текст второй статьи' }
];

// Получить все статьи
app.get('/articles', (req, res) => {
  res.json(articles);
});

// Получить статью по id
app.get('/articles/:id', (req, res) => {
  const article = articles.find(a => a.id === parseInt(req.params.id));
  if (!article) {
    return res.status(404).json({ error: 'Статья не найдена' });
  }
  res.json(article);
});

// Создать новую статью
app.post('/articles', (req, res) => {
  const { title, content } = req.body;
  if (!title || !content) {
    return res.status(400).json({ error: 'Требуются title и content' });
  }
  const newArticle = {
    id: articles.length + 1,
    title,
    content
  };
  articles.push(newArticle);
  res.status(201).json(newArticle);
});

// Удалить статью
app.delete('/articles/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const index = articles.findIndex(a => a.id === id);
  if (index === -1) {
    return res.status(404).json({ error: 'Статья не найдена' });
  }
  articles.splice(index, 1);
  res.status(204).send();
});

Пояснения к коду:

  • let articles = [...] — временное хранилище статей. В реальных приложениях данные обычно хранятся в базе данных.
  • app.get('/articles', ...) — возвращает список всех статей в формате JSON.
  • app.get('/articles/:id', ...) — ищет статью по идентификатору, переданному в URL. Если статья не найдена, возвращает ошибку 404.
  • app.post('/articles', ...) — создаёт новую статью. Ожидает, что в теле запроса будет JSON с полями title и content. Если данные не переданы, возвращает ошибку 400.
  • app.delete('/articles/:id', ...) — удаляет статью по id. Если статья не найдена, возвращает ошибку 404. Если удаление прошло успешно, возвращает статус 204 (без содержимого).

Важно: В этом примере данные хранятся только в оперативной памяти сервера. После перезапуска сервера все статьи будут сброшены. Для реальных проектов используйте базы данных (например, MongoDB, PostgreSQL).

Обработка ошибок

В Express.js можно централизованно обрабатывать ошибки с помощью специального middleware. Это позволяет не дублировать обработку ошибок в каждом маршруте и возвращать единообразные ответы клиенту.

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Внутренняя ошибка сервера' });
});

Пояснения:

  • Этот middleware должен быть добавлен после всех маршрутов. Если в процессе обработки запроса возникнет ошибка (например, выброшено исключение), Express передаст её сюда.
  • Внутри middleware можно залогировать ошибку и отправить клиенту стандартный ответ с кодом 500.

Лучшие практики

Чтобы ваш API был надёжным, масштабируемым и удобным для поддержки, следуйте ряду рекомендаций:

  • Используйте dotenv для хранения конфиденциальных данных и настроек (например, порт, строки подключения к БД) в отдельном файле .env.
  • Разделяйте маршруты и бизнес-логику по разным файлам и папкам. Это упростит поддержку и развитие проекта.
  • Валидируйте входящие данные с помощью библиотек, например, Joi. Это поможет избежать ошибок и повысит безопасность.
  • Добавьте логирование запросов и ошибок с помощью morgan или других инструментов.
  • Для production-окружения используйте процесс-менеджер, например, PM2, чтобы автоматически перезапускать сервер при сбоях и управлять несколькими инстансами.

Заключение

Express.js — отличный выбор для быстрого создания REST API на Node.js. Благодаря простоте и гибкости вы можете реализовать как простые, так и сложные серверные приложения. Следуйте лучшим практикам, структурируйте код и не забывайте о безопасности — и ваш API будет надёжным и масштабируемым.

Если у вас остались вопросы или вы хотите узнать больше о продвинутых возможностях Express.js (middleware, аутентификация, интеграция с базами данных) — пишите в комментариях или читайте официальную документацию Express.