Ответ
Stateful сервис хранит состояние (данные) между запросами. Это означает, что сервер помнит предыдущие взаимодействия с клиентом и использует эту информацию для обработки новых запросов.
Пример:
type Session struct {
UserID string
Expiry time.Time
}
var sessions = make(map[string]Session) // Хранилище состояний
func login(w http.ResponseWriter, r *http.Request) {
sessionID := uuid.New().String()
sessions[sessionID] = Session{UserID: "123", Expiry: time.Now().Add(24 * time.Hour)}
http.SetCookie(w, &http.Cookie{Name: "session_id", Value: sessionID})
}
func profile(w http.ResponseWriter, r *http.Request) {
cookie, _ := r.Cookie("session_id")
session := sessions[cookie.Value] // Используем сохранённое состояние
fmt.Fprintf(w, "UserID: %s", session.UserID)
}
Плюсы:
- Удобен для сложных сценариев (например, корзина покупок).
- Меньше нагрузки на клиент.
Минусы:
- Сложнее масштабировать (требует sticky sessions или общего хранилища).
- Риски потери данных при сбоях.
Подходит для сервисов, где важно сохранять контекст между запросами.