В 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');
});