К практике
Начальный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 | Что делает |
|---|---|---|---|
| Create | POST | /api/todos | Создать задачу |
| Read | GET | /api/todos | Получить все задачи |
| Update | PATCH | /api/todos/:id | Изменить задачу |
| Delete | DELETE | /api/todos/:id | Удалить задачу |
Структура, которую мы построим
Данные хранятся в памяти — простой массив объектов:
js
const todos = [
{ id: 1, title: "Первая задача", done: false },
];Каждый маршрут читает или изменяет этот массив и возвращает результат.
Коды ответа
200— успешный GET / PATCH / DELETE201— успешный 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'));