Введение: зачем вам REST API на JavaScript за 30 минут?
Современная веб-разработка немыслима без API (Application Programming Interface). REST (Representational State Transfer) — это самый популярный архитектурный стиль для создания веб-сервисов. Если вы хотите быстро освоить backend-разработку или запустить свой первый сервер, JavaScript и Node.js — идеальный выбор. За 30 минут вы сможете создать полноценный REST API, который будет обрабатывать запросы, возвращать данные в формате JSON и работать с базой данных (в нашем примере — с простым массивом в памяти).
В этой статье мы разберем практический пример: создадим API для управления списком задач (To-Do list). Вы научитесь настраивать сервер, обрабатывать GET, POST, PUT и DELETE запросы, а также добавлять базовую валидацию. К концу чтения у вас будет готовый код, который можно сразу запустить и протестировать.
Шаг 1: Настройка проекта и установка зависимостей
Прежде чем писать код, нужно подготовить окружение. Убедитесь, что у вас установлен Node.js (скачать можно с официального сайта). Далее следуйте инструкции:
- Создайте новую папку для проекта, например
rest-api-todo. - Откройте терминал в этой папке и выполните команду
npm init -y— это создаст файлpackage.json. - Установите Express — самый популярный фреймворк для Node.js:
npm install express. - Для удобства установите
nodemonкак dev-зависимость:npm install --save-dev nodemon. Он будет автоматически перезапускать сервер при изменениях кода.
После установки добавьте в package.json скрипт для запуска:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
Шаг 2: Создание базового сервера с Express
Теперь создадим файл index.js — это будет точка входа в наше приложение. В нем мы настроим сервер, подключим middleware для работы с JSON и определим первый маршрут.
const express = require('express');
const app = express();
const PORT = 3000;
// Middleware для парсинга JSON
app.use(express.json());
// Временное хранилище данных (вместо базы данных)
let tasks = [
{ id: 1, title: 'Изучить Express', completed: false },
{ id: 2, title: 'Написать REST API', completed: false }
];
let currentId = 3;
// Базовый маршрут для проверки
app.get('/', (req, res) => {
res.send('REST API работает! Используйте /api/tasks');
});
// Запуск сервера
app.listen(PORT, () => {
console.log(`Сервер запущен на http://localhost:${PORT}`);
});
Запустите сервер командой npm run dev и откройте в браузере http://localhost:3000. Вы должны увидеть сообщение "REST API работает!".
Шаг 3: Реализация CRUD-операций (GET, POST, PUT, DELETE)
Теперь самое интересное — создадим полноценный REST API для управления задачами. Мы реализуем четыре основных HTTP-метода:
3.1. GET /api/tasks — получение всех задач
// Получить все задачи
app.get('/api/tasks', (req, res) => {
res.json(tasks);
});
3.2. GET /api/tasks/:id — получение одной задачи по ID
// Получить задачу по ID
app.get('/api/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
const task = tasks.find(t => t.id === id);
if (!task) {
return res.status(404).json({ message: 'Задача не найдена' });
}
res.json(task);
});
3.3. POST /api/tasks — создание новой задачи
// Создать новую задачу
app.post('/api/tasks', (req, res) => {
const { title, completed } = req.body;
// Валидация
if (!title || typeof title !== 'string') {
return res.status(400).json({ message: 'Название задачи обязательно и должно быть строкой' });
}
const newTask = {
id: currentId++,
title: title,
completed: completed || false
};
tasks.push(newTask);
res.status(201).json(newTask);
});
3.4. PUT /api/tasks/:id — обновление задачи
// Обновить задачу
app.put('/api/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
const task = tasks.find(t => t.id === id);
if (!task) {
return res.status(404).json({ message: 'Задача не найдена' });
}
const { title, completed } = req.body;
if (title !== undefined) {
if (typeof title !== 'string') {
return res.status(400).json({ message: 'Название должно быть строкой' });
}
task.title = title;
}
if (completed !== undefined) {
if (typeof completed !== 'boolean') {
return res.status(400).json({ message: 'Статус должен быть булевым значением' });
}
task.completed = completed;
}
res.json(task);
});
3.5. DELETE /api/tasks/:id — удаление задачи
// Удалить задачу
app.delete('/api/tasks/:id', (req, res) => {
const id = parseInt(req.params.id);
const index = tasks.findIndex(t => t.id === id);
if (index === -1) {
return res.status(404).json({ message: 'Задача не найдена' });
}
tasks.splice(index, 1);
res.status(204).send(); // 204 No Content
});
Шаг 4: Тестирование API
После того как весь код написан, протестируйте API с помощью любого HTTP-клиента: Postman, Insomnia или просто через терминал с curl. Вот несколько примеров:
- Получить все задачи:
GET http://localhost:3000/api/tasks - Создать задачу:
POST http://localhost:3000/api/tasksс телом{"title": "Новая задача"} - Обновить задачу:
PUT http://localhost:3000/api/tasks/1с телом{"completed": true} - Удалить задачу:
DELETE