Введение: REST API — это просто
REST API (Representational State Transfer) — это "язык", на котором общаются разные программы в интернете. Если вы хотите, чтобы ваше веб-приложение отдавало данные другому приложению (например, мобильному клиенту или фронтенду на React), вам нужно API. И сегодня мы напишем его на JavaScript (Node.js) с нуля всего за 30 минут.
Мы будем использовать самую популярную библиотеку — Express. Она проста, гибка и идеально подходит для начинающих. К концу статьи у вас будет рабочий сервер с четырьмя основными CRUD-операциями (создание, чтение, обновление, удаление). Поехали!
Шаг 1: Подготовка окружения и установка Express
Прежде чем писать код, убедитесь, что у вас установлен Node.js. Проверить это можно в терминале:
node -v
npm -v
Если версии отображаются — всё готово. Если нет, скачайте Node.js с официального сайта.
Теперь создайте папку для проекта и инициализируйте его:
mkdir my-first-api
cd my-first-api
npm init -y
Файл package.json создан. Устанавливаем Express и библиотеку для работы с UUID (для генерации уникальных ID):
npm install express uuid
Готово. Создайте файл index.js — это будет главный файл нашего сервера.
Шаг 2: Создаём простой сервер на Express
Откройте index.js и напишите первую версию сервера:
const express = require('express');
const app = express();
const PORT = 3000;
// Парсинг JSON из тела запроса
app.use(express.json());
// Тестовый маршрут
app.get('/', (req, res) => {
res.send('Привет, мир! REST API работает!');
});
// Запуск сервера
app.listen(PORT, () => {
console.log(`Сервер запущен на http://localhost:${PORT}`);
});
Запустите сервер командой:
node index.js
Откройте браузер и перейдите по адресу http://localhost:3000. Если видите приветственное сообщение — всё работает!
Разберём код: express.json() — это middleware, который автоматически преобразует JSON из запроса в объект JavaScript. Это нужно для POST и PUT запросов.
Шаг 3: Добавляем данные и CRUD-маршруты
Теперь самое интересное — создадим массив с данными (в реальном проекте вы бы использовали базу данных, но для обучения массив подойдёт). Это будет список книг.
const { v4: uuidv4 } = require('uuid');
// Имитация базы данных
let books = [];
// Создать книгу (POST)
app.post('/api/books', (req, res) => {
const { title, author } = req.body;
if (!title || !author) {
return res.status(400).json({ error: 'Нужно указать title и author' });
}
const newBook = {
id: uuidv4(),
title,
author
};
books.push(newBook);
res.status(201).json(newBook);
});
// Получить все книги (GET)
app.get('/api/books', (req, res) => {
res.json(books);
});
// Получить одну книгу по ID (GET)
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === req.params.id);
if (!book) {
return res.status(404).json({ error: 'Книга не найдена' });
}
res.json(book);
});
// Обновить книгу (PUT)
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === req.params.id);
if (!book) {
return res.status(404).json({ error: 'Книга не найдена' });
}
const { title, author } = req.body;
if (title) book.title = title;
if (author) book.author = author;
res.json(book);
});
// Удалить книгу (DELETE)
app.delete('/api/books/:id', (req, res) => {
const index = books.findIndex(b => b.id === req.params.id);
if (index === -1) {
return res.status(404).json({ error: 'Книга не найдена' });
}
books.splice(index, 1);
res.status(204).send(); // 204 - нет содержимого
});
Теперь у нас есть полноценное REST API. Протестируем его с помощью cURL или Postman.
Пример добавления книги через cURL:
curl -X POST http://localhost:3000/api/books \
-H "Content-Type: application/json" \
-d '{"title":"Война и мир","author":"Лев Толстой"}'
Ответ должен содержать созданную книгу с уникальным ID.
Шаг 4: Тестируем и улучшаем API
Чтобы убедиться, что всё работает, давайте пройдёмся по всем маршрутам:
- GET /api/books — вернёт массив всех книг.
- GET /api/books/:id — вернёт одну книгу (замените :id на реальный ID).
- PUT /api/books/:id — обновит данные книги (отправьте JSON с новыми полями).
- DELETE /api/books/:id — удалит книгу (вернёт статус 204).
Если какой-то маршрут возвращает ошибку 404, проверьте ID — они чувствительны к регистру.
Теперь несколько советов для улучшения проекта:
- Добавьте валидацию: проверяйте типы данных (например, что title — строка).
- Разделите код: вынесите маршруты в отдельный файл
routes/books.js. - Добавьте логирование: используйте библиотеку
morganдля отслеживания запросов. - Подключите настоящую базу данных: например, MongoDB через Mongoose или SQLite через Sequelize.
Заключение
Поздравляю! Вы только что написали своё первое REST API на JavaScript (Node.js) за 30 минут. Вы освоили:
- Установку и настройку Express.
- Создание HTTP-маршрутов (GET, POST, PUT, DELETE).
- Работу с JSON-данными.
- Базовую обработку ошиб