В stateless архитектуре, вся информация, необходимая для обработки запроса, содержится непосредственно в запросе. Это означает, что сервер не хранит состояние клиента между запросами. Клиент должен передавать всю необходимую информацию (например, токен авторизации или идентификатор сессии) с каждым новым запросом.
Примером такого подхода может быть авторизация через токен, который передается в заголовке каждого запроса. Сервер проверяет этот токен, но не хранит никакую информацию о предыдущих запросах или сессиях. Таким образом, каждый запрос является независимым и самодостаточным.
1. Stateless (без состояния):
• Сервер не хранит информацию о предыдущих запросах клиента. Каждый запрос от клиента содержит всю необходимую информацию для обработки, включая данные аутентификации или сессии.
• Например, если вы отправляете запрос на сервер для получения данных, сервер не будет помнить, что вы сделали перед этим. Он обрабатывает каждый запрос независимо.
• Это удобно для масштабируемости: легко добавить больше серверов, так как каждый запрос не зависит от предыдущих.
const express = require('express');
const app = express();
// Простая авторизация через токен (Stateless)
app.use((req, res, next) => {
const token = req.headers['authorization'];
if (token === 'valid_token') {
next(); // Если токен валиден, продолжаем
} else {
res.status(401).send('Unauthorized');
}
});
app.get('/data', (req, res) => {
res.json({ message: 'Данные доступны!' });
});
app.listen(3000, () => {
console.log('Stateless API запущен на порту 3000');
});
2. Stateful (состояние сохраняется):
• Сервер помнит состояние между запросами от одного клиента. Например, если пользователь авторизовался, сервер может хранить эту информацию и учитывать её при дальнейших запросах без повторной аутентификации.
• Это требует от сервера хранить данные о клиентах между запросами, что может усложнять масштабирование, так как нужно синхронизировать состояние между серверами.
Пример:
• Stateless: REST API, где каждое обращение передает токен авторизации в заголовке запроса. Сервер не хранит никакие сессии.
• Stateful: Приложение, которое использует сессии, чтобы помнить, что пользователь уже вошел в систему, и не запрашивает повторно его логин при каждом действии.
const express = require('express');
const session = require('express-session');
const app = express();
// Настройка сессий
app.use(session({
secret: 'my_secret_key',
resave: false,
saveUninitialized: true
}));
// Пример авторизации с использованием сессий (Stateful)
app.post('/login', (req, res) => {
// После авторизации сохраняем данные пользователя в сессии
req.session.user = { id: 1, name: 'John Doe' };
res.send('Авторизация успешна');
});
app.get('/dashboard', (req, res) => {
if (req.session.user) {
res.send(`Добро пожаловать, ${req.session.user.name}`);
} else {
res.status(401).send('Войдите в систему');
}
});
app.listen(3000, () => {
console.log('Stateful API запущен на порту 3000');
});
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ