Ответ
REST (Representational State Transfer) — это архитектурный стиль для построения распределенных систем, в частности веб-сервисов (RESTful API). Он использует стандартные возможности протокола HTTP.
Основные принципы REST применительно к разработке на Node.js:
-
Ресурсо-ориентированность: Все сущности (пользователи, заказы) представляются как ресурсы с уникальными идентификаторами (URI).
GET /api/users— получить список пользователей.GET /api/users/123— получить пользователя с ID 123.
-
Единообразие интерфейса (Uniform Interface): Использование стандартных HTTP-методов для операций CRUD.
GET— получение ресурса.POST— создание нового ресурса.PUT— полное обновление ресурса.PATCH— частичное обновление ресурса.DELETE— удаление ресурса.
-
Отсутствие состояния (Stateless): Каждый запрос от клиента должен содержать всю информацию, необходимую серверу для его обработки. Сервер не хранит состояние сессии клиента между запросами. Аутентификация, например, реализуется через токены (JWT в заголовке каждого запроса).
-
Кэшируемость: Ответы сервера должны явно указывать, можно ли их кэшировать и как долго (через HTTP-заголовки
Cache-Control,ETag). -
Слоистая система: Клиент не знает, подключен ли он напрямую к серверу или через промежуточные узлы (балансировщики, прокси, шлюзы).
Пример реализации простого RESTful API для ресурса articles на Express.js:
const express = require('express');
const app = express();
app.use(express.json());
let articles = [{ id: 1, title: 'First Article' }];
let nextId = 2;
// GET /articles — получить все статьи
app.get('/articles', (req, res) => {
res.json(articles);
});
// POST /articles — создать новую статью
app.post('/articles', (req, res) => {
const newArticle = { id: nextId++, ...req.body };
articles.push(newArticle);
res.status(201).json(newArticle); // 201 Created
});
// GET /articles/:id — получить статью по ID
app.get('/articles/:id', (req, res) => {
const article = articles.find(a => a.id === parseInt(req.params.id));
if (!article) return res.status(404).send('Article not found');
res.json(article);
});
// PUT /articles/:id — полностью обновить статью
app.put('/articles/:id', (req, res) => {
const index = articles.findIndex(a => a.id === parseInt(req.params.id));
if (index === -1) return res.status(404).send('Article not found');
articles[index] = { id: articles[index].id, ...req.body };
res.json(articles[index]);
});
// DELETE /articles/:id — удалить статью
app.delete('/articles/:id', (req, res) => {
const initialLength = articles.length;
articles = articles.filter(a => a.id !== parseInt(req.params.id));
if (articles.length === initialLength) return res.status(404).send('Article not found');
res.status(204).send(); // 204 No Content
});
app.listen(3000); Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶