Минимальный REST-сервис использует GET для списка, POST для создания, PATCH для изменения и DELETE для удаления, проверяя вход и существование задачи.
Реализуйте базовый REST-сервис на Express для задач: получение списка, создание, обновление и удаление задач.
Минимальный REST-сервис использует GET для списка, POST для создания, PATCH для изменения и DELETE для удаления, проверяя вход и существование задачи.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Минимальный REST-сервис использует GET для списка, POST для создания, PATCH для изменения и DELETE для удаления, проверяя вход и существование задачи.
Учебный пример хранит данные в памяти и не реализует пользовательский доступ; после перезапуска задачи пропадут.
import express from 'express';
import { randomUUID } from 'node:crypto';
const app = express();
const tasks = new Map();
app.use(express.json({ limit: '16kb' }));
app.get('/tasks', (req, res) => res.json([...tasks.values()]));
app.post('/tasks', (req, res) => {
const title = req.body?.title;
if (typeof title !== 'string' || !title.trim()) {
return res.status(400).json({ error: 'Title required' });
}
const task = { id: randomUUID(), title: title.trim(), completed: false };
tasks.set(task.id, task);
return res.status(201).json(task);
});
app.patch('/tasks/:id', (req, res) => {
const task = tasks.get(req.params.id);
if (!task) return res.status(404).json({ error: 'Not found' });
const { title, completed } = req.body ?? {};
if ((title === undefined && completed === undefined) ||
(title !== undefined && (typeof title !== 'string' || !title.trim())) ||
(completed !== undefined && typeof completed !== 'boolean')) {
return res.status(400).json({ error: 'Invalid update' });
}
if (title !== undefined) task.title = title.trim();
if (completed !== undefined) task.completed = completed;
return res.json(task);
});
app.delete('/tasks/:id', (req, res) => {
if (!tasks.delete(req.params.id)) return res.status(404).json({ error: 'Not found' });
return res.status(204).end();
});
app.listen(3000);
Для production нужны постоянное хранилище, авторизация и ownership, пагинация, ограничения нагрузки и единый обработчик ошибок.
Источник: expressjs.com.