Back

Как создать минимальный REST API на Node.js

Как создать минимальный REST API на Node.js

Вам нужен быстрый бэкенд для вашего фронтенд-проекта. Возможно, это прототип, локальная разработка или простой production-сервис. Настройка REST API на Node.js не должна занимать неделю конфигурации.

Это руководство проведёт вас через процесс создания минимального REST API с использованием современного Node.js и Express 5. Вы получите парсинг JSON, корректную обработку ошибок и чистую структуру — всё это примерно в 80 строках кода.

Ключевые моменты

  • Создайте функциональный REST API с Express 5 примерно в 80 строках кода
  • Используйте встроенное middleware для парсинга JSON без внешних зависимостей
  • Реализуйте согласованные паттерны ответов с корректными HTTP-статусами
  • Добавьте централизованную обработку ошибок для снижения неожиданных сбоев сервера

Предварительные требования

Перед началом убедитесь, что у вас есть:

Настройка проекта

Создайте новую директорию и инициализируйте проект:

mkdir minimal-api
cd minimal-api
npm init -y

Установите Express 5:

npm install express

Откройте package.json и добавьте "type": "module" для включения ESM-импортов. Ваш файл должен содержать:

{
  "type": "module",
  "scripts": {
    "start": "node server.js"
  }
}

Создание вашего API на Express 5

Создайте файл server.js со следующим кодом:

import express from 'express'

const app = express()
const PORT = process.env.PORT || 3000

// Built-in JSON parsing middleware
app.use(express.json())

// In-memory data store
let items = [
  { id: 1, name: 'First item' },
  { id: 2, name: 'Second item' }
]

let nextId = 3

// GET all items
app.get('/api/items', (req, res) => {
  res.json({ data: items })
})

// GET single item
app.get('/api/items/:id', (req, res) => {
  const item = items.find(i => i.id === parseInt(req.params.id))
  if (!item) {
    return res.status(404).json({ error: 'Item not found' })
  }
  res.json({ data: item })
})

// POST new item
app.post('/api/items', (req, res) => {
  const { name } = req.body
  if (!name) {
    return res.status(400).json({ error: 'Name is required' })
  }
  const newItem = { id: nextId++, name }
  items.push(newItem)
  res.status(201).json({ data: newItem })
})

// DELETE item
app.delete('/api/items/:id', (req, res) => {
  const index = items.findIndex(i => i.id === parseInt(req.params.id))
  if (index === -1) {
    return res.status(404).json({ error: 'Item not found' })
  }
  items.splice(index, 1)
  res.status(204).send()
})

// 404 handler for undefined routes
app.use((req, res) => {
  res.status(404).json({ error: 'Route not found' })
})

// Error handling middleware
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).json({ error: 'Internal server error' })
})

app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`)
})

Запустите сервер:

npm start

Понимание структуры бэкенд API на JavaScript

Эта минимальная настройка REST API на Node охватывает основные элементы:

Парсинг JSON: Express 5 включает express.json() как встроенное middleware. Внешние пакеты не требуются (см. документацию Express API).

Согласованные ответы: Каждая конечная точка возвращает JSON со свойством data или error. Эта предсказуемость помогает фронтенд-коду единообразно обрабатывать ответы.

HTTP-коды статуса: API использует соответствующие коды — 200 для успеха, 201 для созданных ресурсов, 204 для успешных удалений, 400 для некорректных запросов, 404 для отсутствующих ресурсов и 500 для серверных ошибок.

Обработка ошибок: Универсальное middleware для обработки ошибок предотвращает падение сервера из-за необработанных ошибок маршрутизации.

Тестирование конечных точек

Используйте curl или любой HTTP-клиент:

# Get all items
curl http://localhost:3000/api/items

# Get single item
curl http://localhost:3000/api/items/1

# Create item
curl -X POST http://localhost:3000/api/items \
  -H "Content-Type: application/json" \
  -d '{"name": "New item"}'

# Delete item
curl -X DELETE http://localhost:3000/api/items/1

Что не включено в это руководство

Это руководство намеренно не рассматривает базы данных, аутентификацию и сложную валидацию. Эти аспекты важны для production-систем, но добавляют лишний шум, когда вы изучаете основы или быстро создаёте прототип.

Когда будете готовы к расширению, рассмотрите добавление:

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

Заключение

Теперь у вас есть рабочий минимальный REST API на Node.js с Express 5. Паттерн, представленный здесь — согласованные JSON-ответы, корректные коды статуса и централизованная обработка ошибок — хорошо масштабируется по мере роста вашего API. Начните с этого фундамента, а затем добавляйте сложность только когда того требует ваш проект.

Часто задаваемые вопросы

Express 5 включает нативную поддержку промисов для обработчиков маршрутов, что означает, что отклонённые промисы, которые возвращаются или выбрасываются, автоматически запускают middleware обработки ошибок. Также удалены устаревшие методы и улучшено сопоставление путей. Основной API остаётся похожим, поэтому миграция с Express 4 проста для большинства проектов.

Хранилище в памяти позволяет сосредоточить пример на структуре API, а не на конфигурации базы данных. Это хорошо работает для прототипов и обучения. Для production замените массив на базу данных, такую как PostgreSQL или MongoDB, чтобы сохранять данные между перезапусками сервера.

Установите пакет cors командой npm install cors, затем импортируйте его и добавьте app.use(cors()) перед вашими маршрутами. Вы можете передать опции для ограничения доступа к вашему API с определённых источников. Это необходимо, когда ваш фронтенд работает на другом домене или порту, отличном от бэкенда.

Эта структура предоставляет прочный фундамент, но требует дополнений для использования в production. Добавьте валидацию входных данных, аутентификацию, ограничение частоты запросов, логирование и полноценную базу данных. Паттерны согласованного формата ответов и обработки ошибок, показанные здесь, хорошо масштабируются при добавлении этих функций.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay