Реализуйте базовый REST-сервис на Express для задач: получение списка, создание, обновление и удаление задач.

Минимальный REST-сервис использует GET для списка, POST для создания, PATCH для изменения и DELETE для удаления, проверяя вход и существование задачи.

Короткий ответ

Что ответить на собеседовании

Минимальный 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее