StudyCode
К практике
НачальныйExpressRESTCRUD
НачальныйExpressRESTCRUDAPI

REST API: Todo-сервер

Строим полноценный CRUD API шаг за шагом: GET, POST, PATCH, DELETE — с тестами в браузере.

Нажми на любой элемент диаграммы для объяснения
Шаг 1 из 10
1

Архитектура REST API

Что такое REST API?

REST API — это сервер, который принимает HTTP-запросы и возвращает JSON. Браузер, мобильное приложение, другой сервис — все общаются через одни и те же маршруты.

Четыре операции CRUD

ОперацияHTTP-методURLЧто делает
CreatePOST/api/todosСоздать задачу
ReadGET/api/todosПолучить все задачи
UpdatePATCH/api/todos/:idИзменить задачу
DeleteDELETE/api/todos/:idУдалить задачу

Структура, которую мы построим

Данные хранятся в памяти — простой массив объектов:

js
const todos = [
  { id: 1, title: "Первая задача", done: false },
];

Каждый маршрут читает или изменяет этот массив и возвращает результат.

Коды ответа

  • 200 — успешный GET / PATCH / DELETE
  • 201 — успешный POST (создан новый ресурс)
  • 404 — ресурс не найден
  • 400 — неверный запрос (нет обязательных полей)

На следующих шагах ты напишешь каждый маршрут и сразу проверишь его в браузере.

javascript
const app = express();
app.use(express.json());

const todos = [
  { id: 1, title: "Изучить HTTP-методы", done: true },
  { id: 2, title: "Написать GET /api/todos", done: false },
];
let nextId = 3;

// GET — список всех задач
app.get('/api/todos', (req, res) => {
  res.json(todos);
});

// POST — создать задачу
app.post('/api/todos', (req, res) => {
  const todo = { id: nextId++, title: req.body.title, done: false };
  todos.push(todo);
  res.status(201).json(todo);
});

// PATCH — переключить done
app.patch('/api/todos/:id', (req, res) => {
  const todo = todos.find(t => t.id === Number(req.params.id));
  if (!todo) return res.status(404).json({ error: 'Not found' });
  todo.done = !todo.done;
  res.json(todo);
});

// DELETE — удалить задачу
app.delete('/api/todos/:id', (req, res) => {
  const idx = todos.findIndex(t => t.id === Number(req.params.id));
  if (idx === -1) return res.status(404).json({ error: 'Not found' });
  const [removed] = todos.splice(idx, 1);
  res.json(removed);
});

app.listen(3000, () => console.log('✅ http://localhost:3000'));