Як побудувати REST API з Express.js?
Створення REST API з Express.js
REST API (Representational State Transfer) використовує методи HTTP для виконання CRUD-операцій над ресурсами. Express.js робить це простим завдяки своїй системі маршрутизації.
HTTP Методи → CRUD
| HTTP Метод | CRUD | Опис |
|---|---|---|
| GET | Читати | Отримати ресурс |
| POST | Створити | Створити новий ресурс |
| PUT | Оновити (повністю) | Замінити ресурс |
| PATCH | Оновити (частково) | Модифікувати ресурс |
| DELETE | Видалити | Видалити ресурс |
Повний REST API для користувачів
js
const express = require('express');
const app = express();
app.use(express.json()); // парсити JSON тіло запиту
// Сховище в пам'яті (використовуйте базу даних у виробництві)
let users = [
{ id: 1, name: 'Alice', email: 'alice@example.com' },
{ id: 2, name: 'Bob', email: 'bob@example.com' },
];
let nextId = 3;
// GET /users — список усіх користувачів
app.get('/users', (req, res) => {
res.json(users);
});
// GET /users/:id — отримати одного користувача
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === Number(req.params.id));
if (!user) return res.status(404).json({ error: 'Користувача не знайдено' });
res.json(user);
});
// POST /users — створити користувача
app.post('/users', (req, res) => {
const { name, email } = req.body;
if (!name || !email) {
return res.status(400).json({ error: 'name та email є обов\'язковими' });
}
const user = { id: nextId++, name, email };
users.push(user);
res.status(201).json(user);
});
// PUT /users/:id — замінити користувача
app.put('/users/:id', (req, res) => {
const index = users.findIndex(u => u.id === Number(req.params.id));
if (index === -1) return res.status(404).json({ error: 'Користувача не знайдено' });
users[index] = { id: Number(req.params.id), ...req.body };
res.json(users[index]);
});
// PATCH /users/:id — частково оновити користувача
app.patch('/users/:id', (req, res) => {
const user = users.find(u => u.id === Number(req.params.id));
if (!user) return res.status(404).json({ error: 'Користувача не знайдено' });
Object.assign(user, req.body);
res.json(user);
});
// DELETE /users/:id — видалити користувача
app.delete('/users/:id', (req, res) => {
const index = users.findIndex(u => u.id === Number(req.params.id));
if (index === -1) return res.status(404).json({ error: 'Користувача не знайдено' });
users.splice(index, 1);
res.status(204).send();
});
app.listen(3000, () => console.log('API працює на порту 3000'));Чек-лист об'єкта запиту
js
req.params.id // Параметр URL: /users/:id
req.query.page // Запит рядка: /users?page=2
req.body.name // Тіло запиту (JSON)
req.headers['authorization'] // Заголовки запиту
req.method // 'GET', 'POST' тощо
req.path // '/users/1'
req.ip // IP-адреса клієнтаЧек-лист об'єкта відповіді
js
res.json({ data }) // Відправити JSON (встановлює Content-Type)
res.send('text') // Відправити текст/HTML
res.status(201).json(data) // Встановити статус + відправити JSON
res.status(204).send() // Немає вмісту
res.redirect('/new-url') // Перенаправити
res.set('X-Custom', 'val') // Встановити заголовокНайкращі практики REST API
- Використовуйте іменники для ресурсів:
/users,/products(не/getUsers) - Використовуйте методи HTTP для дій, а не дієслова в URL
- Повертайте відповідні код статусу (200, 201, 400, 401, 404, 500)
- Версіюйте ваш API:
/api/v1/users - Завжди повертайте JSON з послідовною структурою
- Використовуйте множинні назви ресурсів:
/users, а не/user
Послідовний формат відповіді
js
// Успіх
res.json({ success: true, data: user });
// Помилка
res.status(400).json({ success: false, error: 'Валідація не пройшла' });
// Список з пагінацією
res.json({
success: true,
data: users,
pagination: { page: 1, limit: 10, total: 100 }
});Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.