Ответ
В stateless-архитектуре сервер не хранит информацию о предыдущих запросах клиента (состояние сессии). Каждый запрос рассматривается как независимая транзакция. Для этого он должен содержать всю необходимую для его обработки информацию.
Ключевые данные в stateless-запросе:
-
Данные для аутентификации и авторизации
- Сервер должен иметь возможность идентифицировать пользователя и проверить его права доступа на основе данных из самого запроса. Обычно это токен, передаваемый в заголовке.
- Пример:
Authorization: Bearer <JWT_TOKEN>
-
Полный контекст операции
- Все параметры, необходимые для выполнения действия, должны быть переданы в запросе (в теле, параметрах URL или заголовках). Сервер не должен искать недостающие данные в сессии.
- Пример: Для получения заказа
GET /orders/123
содержит ID заказа. Для создания товараPOST /products
содержит все его атрибуты в теле запроса.
-
Информация о желаемом формате ответа (опционально)
- Заголовки, такие как
Accept
илиAccept-Language
, позволяют клиенту указать, в каком формате или на каком языке он хочет получить ответ. - Пример:
Accept: application/json
- Заголовки, такие как
Пример запроса с JWT-токеном:
import requests
# Токен содержит всю информацию о пользователе и его правах
auth_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
headers = {
"Authorization": f"Bearer {auth_token}",
"Content-Type": "application/json"
}
# Запрос на получение данных. Серверу не нужно знать, кто делал предыдущие запросы.
response = requests.get("https://api.example.com/user/profile", headers=headers)
Преимущество stateless-подхода — высокая масштабируемость, так как любой экземпляр сервера может обработать любой запрос.