Спроектируй чистый REST API с правильными HTTP-методами, правильными кодами состояния и валидацией тела запроса.
Открыть этот урок в KodokonREST API предоставляет ресурсы (пользователи, задачи, заказы), которыми управляют с помощью HTTP-методов: GET для чтения, POST для создания, PUT или PATCH для обновления, DELETE для удаления. Профессиональное соглашение: существительные во множественном числе, никаких глаголов в URL. Ты пишешь POST /tasks, а не /createTask. Давай соберём небольшой API задач, пока что в памяти.
import express from "express";
const app = express();
app.use(express.json());
const tasks = [
{ id: 1, title: "Review the module", done: false }
];
app.get("/tasks", (req, res) => {
res.json(tasks);
});
app.listen(3000);Строка app.use(express.json()) обязательна: без неё req.body равен undefined для любого JSON-запроса. При создании всегда проверяй входные данные, отвечай кодом 201 и возвращай созданный ресурс: так клиент сможет получить сгенерированный сервером id.
app.post("/tasks", (req, res) => {
const { title } = req.body;
if (!title) {
return res.status(400).json({
error: "The title field is required"
});
}
const task = {
id: tasks.length + 1,
title,
done: false
};
tasks.push(task);
res.status(201).json(task);
});Запомни коды, которыми будешь пользоваться каждый день: 200 - успешное чтение или обновление, 201 - ресурс создан, 204 - успех без содержимого (удаление), 400 - некорректный запрос, 404 - ресурс не найден, 500 - ошибка сервера. Правило простое: если 4xx - ошибся клиент, если 5xx - подвёл твой код.
app.delete("/tasks/:id", (req, res) => {
const id = Number(req.params.id);
const index = tasks.findIndex((t) => t.id === id);
if (index === -1) {
return res.status(404).json({
error: "Task not found"
});
}
tasks.splice(index, 1);
res.status(204).end();
});req.body остаётся undefined при JSON-запросе?app.use(express.json())app.use(express.static(...))app.listen(3000)title. Как правильно отреагировать API?